Hibernate基础
来源:互联网 发布:蝉知cms 编辑:程序博客网 时间:2024/05/17 08:01
简介:简化ORM映射文件的配置(*.hbm)
JPA与Hibernate:JPA(Java Persistence API)是J2EE的规范标准。JPA是接口,Hibernate是实现。通过hibernate-annotation、hibernate-entityManager和hibernate-core三个组件实现。开发中优先选择JPA的注解
注解分类、schema与catalog
常用类级别注解:@Entity、@Table、@Embeddable
hibernate.cfg.xml
配置<session-factory>相关信息:
1.需要配置数据源的账号、密码、驱动、链接、方言。
2.开发常用配置
显示sql语句<propertyname="show_sql">true</property>
格式化sql语句<propertyname="format_sql">true</property>
自动生成表结构<property name="hbm2ddl.auto">update</property>
3.会话
<property name="hibernate.current_session_context_class">thread</property>
类级别注解
@Entity(name="")
映射的实体类,name是可选的,对应数据库的一张表,若表名与实体类名一样则不用配。使用时需指定实体类的主键属性。
还需在配置文件hibernate.cfg.xml配置注册<mapping class="">
@Table(name="", catalog="", schema="")
与@Entity配合使用,表示实体对应的数据库表的信息。
name,可选,映射表名称,默认一致;catalog,可选,表示Catalog名称,默认为catalog("");schema,可选,表示Schema的名称,默认为schema("")。Table的name属性设定后Entity就不需要设置了
@Embeddable
表示一个非Entity类可以嵌入到另外一个Entity类中作为属性。比如地址信息可以另外声明一个类并注明此注解,在Entity类中常规引用就能使用了
属性级别注解
可用在成员变量、也可用在get方法上,但注意必须统一在变量或者方法上注解
@Id
主键属性,在entity中是必须的。如果定义了多个主键,要实现serializable接口。
如果主键是String,则还需在写一个@Column(length=8)注解,有些数据库不支持这么长的主键。
@GeneratedValue(strategy=GenerationType,generator=””)生成策略,
生成器Strategy表示主键生成策略,取值有
GenerationType.AUTO:根据底层数据库自动选择(默认);
GenerationType.INDENTITY:标识列,根据数据库的Identity字段生成的;
GenerationType.SEQUENCE:使用Sequence来决定主键的取值;
GenerationType.TABLE:借助于表实现主键生成策略,还需借助其他注解@TableGenerator(name=”tab_cat_gen”,allocationSize=1)分配的空间大小。
Generator表示主键生成器的名称,这个属性通常和ORM框架相关,如Hibernate可以指定uuid等主键生成方式。
如果要手动赋值主键:不能用JPA的生成策略,要指定一个主键生成器,先写@GeneratedValue(generator=”sid”),然后用Hibernate的@GenericGenerator(neme=”sid”,strategy=”assigned”)这个注解的name属性就是JPA的GeneratedValue注解的generator用来指定生成器的名字,strategy手工复制用assigned。
@Column(name=””,nullable=””,unique=””,length=””,insertable=””,updateable=””)
对应表的字段名,是否可空值,是否唯一,是否可插入,是否可更新(生日这种数据是不用再更新的)
@Embedded
如果属性用了Emdedded,则对应的嵌入类必须用@Embeddable接口
@EmbeddedId
实现复合主键的作用,在实体类的主键属性添加@EmbeddedId,主键的类添加@Embeddable,并且实现Serializable接口、无参的public构造方法、重写equals()和hashCode()。
@Transient
表示该属性并非映射到数据库字段,ORM将忽略改属性,属性字段不加此注解则默认注解为@Basic
@SequenceGenerator
@Lob
@Version
@Basic
关系映射级别注解
先保存外键对象再保存主表对象
一对一单向外键(一个公民一个身份证)
两个注解:写在主控类中
@OneToOne(cascade=CascadeType.ALL)
属性表示级联关系
@JoinColumn(name=”pid”,unique=true)
被控类的外键写入主控类中,name是被控类的主键
被控类要用注解@Entity
添加信息时要先保存被控类(外键信息),再保存主控类(主键信息)
一对一双向外键关联(一个公民一个身份证)
双方都持有对方的引用,变化主要体现在被控方,在持有对方引用的上面添加@OneToOne(mappedBy=”card”),mappedBy表示指定主控方的外键属性,控制权力给主控方。一对一双向外键关联一定要设置mappedBy,只能交给一方控制
添加信息时要先保存被控类(外键信息),再保存主控类(主键信息)
一对一单向外键联合主键
创建主键类,实现Serializable,重写equals,hashCode方法
多对一单向外键关联(多个学生对应一个班级)
多方添加注解
@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)后面的属性是抓取策略
@JoinColumn(name=”cid”,referenceColumnName=”CID”)name属性表示多方持有一方的外键;后面属性表示对应外键能映射成数据库表中的字段,就可以修改其名称
先保存班级信息再保存学生信息
一对多单向外键关联(一个班级有多个学校)
一方持有多方的集合,一方的集合上添加注解
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY),一方通常使用懒加载
@JoinColumn(name=”cid”)对应外键的名称
先保存学生信息再保存班级
一对多双向外键关联
多方持有一方的引用
@ManyToOne(cascade={CasecadeType.ALL},fetch=FetchType.EAGER)
@JoinColumn(name=”cid”)
一方持有多方的集合
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@JoinColumn(name=”cid”)
随便先保存班级还是学生
多对多单向外键关联(学生和教师构成多对多)
一个多方持有另一个多方的集合对象(学生持有教师)
创建中间表,通过注解自动生成,在学生类添加注解
@ManyToMany
@JoinTable(name=””,joinColumn={@JoinColumn(name=”sid”)},inverseJoinColumns{@JoinColumn(name=”tid”)})name是中间表的表名
先保存教师,再保存学生
多对多双向外键关联
其中一方设置主控方交给另外一方
@ManyToMany(mappedBy=”teachers”)属性写主控方对应的属性名
- Hibernate基础
- hibernate基础
- Hibernate基础
- Hibernate基础
- hibernate 基础
- Hibernate基础
- hibernate基础
- hibernate基础
- Hibernate基础
- Hibernate基础
- Hibernate 基础
- Hibernate基础
- Hibernate基础
- Hibernate基础
- Hibernate 基础
- Hibernate基础
- Hibernate基础
- Hibernate基础
- java 单元测试框架-JUnit4
- blender小知识点编外篇一
- Exynos4412 文件系统制作(三)—— 文件系统移植
- 图片的异步加载
- 《HTML5移动开发指南》——笔记5(html5表单元素)
- Hibernate基础
- 单臂路由,三层交换实现vlan间通信
- 反射中的Member.Field
- 二叉搜索树后序遍历序列判断
- Exynos4412 文件系统制作(二)—— 文件系统简介
- mail工具的安装、配置及问题处理
- Python 小练习_班级平均分
- Exynos4412 文件系统制作(一)—— 文件系统的启动过程分析
- windows下运行caffe例子:cifar10图像训练生成caffemodel