Hibernate的annotation

眉间皱痕 提交于 2019-12-02 16:34:51
@Controller控制器
@Conponent  组件
@Repository  Dao访问层
@Entity 实体
@Table 实体mapping表
@Column 属性mapping列   ---->  不需要Mapping的时候用@Transient
@Id mapping主键属性,可以将Entity中的某个属性标识为标识符(identifier)。可通过应用自身创建,也可以由Hibernate生成。
@Genarated value 标识符的生产策略。

*AUTO        可以是一下三种任意一种类型,取决于地层数据库的不同

*TABLE       使用表保存id

*IDENTITY    identity column

*SEQUENCE   sequence

@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属性:指定了主体端的属性名,用以绑定双方的关系    

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!