*AUTO 能够是一下三种任意一种类型,取决于地层数据库的不一样java
*TABLE 使用表保存id值web
*IDENTITY identity column数据库
@Id @GeneratedValue(strategy = GenerationType.IDENTITy) Public Integer getId() {… …}
@Id @GeneratedValue(generator = "system-uuid")[该属性名自定义] @GenericGenerator(name = " system-uuid ", strategy = "uuid") [name可自定义,可是strategy属性必须是Hibernate中有效的主键策略] @Column (name = "user_id") private Integer userId;
@Id @GeneratedValue(generator = "hilo") @GenericGenerator(name = "hilo", strategy = "hilo") @Column (name = "user_id") private Integer userId;
注释分为两类,分别是Logical mapping和Physical mapping,经过Logical mapping可用描述对象模型,类之间的关系等等,而Physical mapping注释则描述了物理的schema,表,列,索引等等。缓存
mappedBy值对应@OneToOne或@ManyToOne标注的属性值,至关于inverse=true,指定不须要维护关系的一端。并发
好比校长不须要记住每一个人的名字,每一个人来记校长的名字。由多的一端来维护。app
多对多关联:ide
经过@ManyToMany注解可定义多对多关联。同时,也须要经过注解@JoinTable描述关联表和关联条件。对于双向关联,其中一端必须定义为owner,另外一端必须定义为inverse(在对关联表进行更性操做时这一端将被忽略)。被关联端没必要也不能描述物理映射,只须要一个简单的mappedBy参数,该参数包含了主体端的属性名,这样就绑定了双方的关系。 fetch
功能说明:
@ManyToMany注解
targetEntity属性:指向被关联端的实体对象
cascade属性:与Hibernate xml配置文件中的意思同样,这里选用两种方式
CascadeType.PERSIST:若实体是处于被管理状态,或当persist()方法被调用时,触发级联建立(create)操做。
CascadeType.MERGE:若实体是处于被管理状态,或当merge)方法被调用时,触发级联合并(merge)操做。
其它属性如CascadeType.REMOVE、CascadeType.REFRESH、CascadeType.ALL等属性可参考Hibernate Annotations Reference。
fetch属性:关联关系获取方式
LAZY(默认值)在第一次访问关联对象时才触发相应的查询操做。
另外一个值EAGER是经过out join select直接获取关联对象
@JoinTable注解
name属性:指定关联表名 若不指定Hibernate能够根据既定的规则自动生成(具体规则见reference)
joinColumns属性:指定主体端的外键
inverseJoinColumns属性:指定被关联端的外键ui
@Cache注解
usage属性:给定了缓存的并发策略spa
@ManyToMany注解
mappedBy属性:指定了主体端的属性名,用以绑定双方的关系