*AUTO 可以是一下三种任意一种类型,取决于地层数据库的不同
*TABLE 使用表保存id值
*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,指定不需要维护关系的一端。
比如校长不需要记住每个人的名字,每个人来记校长的名字。由多的一端来维护。
多对多关联:
通过@ManyToMany注解可定义多对多关联。同时,也需要通过注解@JoinTable描述关联表和关联条件。对于双向关联,其中一端必须定义为owner,另一端必须定义为inverse(在对关联表进行更性操作时这一端将被忽略)。被关联端不必也不能描述物理映射,只需要一个简单的mappedBy参数,该参数包含了主体端的属性名,这样就绑定了双方的关系。
功能说明:
@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属性:指定被关联端的外键
@Cache注解
usage属性:给定了缓存的并发策略
@ManyToMany注解
mappedBy属性:指定了主体端的属性名,用以绑定双方的关系
来源:oschina
链接:https://my.oschina.net/u/4877/blog/56993