在 Hibernate 4 中注释关系
在 Hibernate 4 和 Spring 中,您可以使用注释定义类之间的各种关系。以下概述了如何创建一对一、一对多、多对一和多对多关系:
单向一对一关系:
- 在所属类上使用@OneToOne(所属类的主键引用另一个类)。
- 另一个类上不需要相应的映射。
双向一对一关系:
- 在所属类上使用 @OneToOne(mappedBy = "bar") 来指示关系由另一个类管理。
- 在另一个类上使用@OneToOne,并使用mappedBy 指向所属类。
单向一对多关系使用用户管理的联接表:
- 在所属类上使用 @OneToMany。
- 使用 @JoinTable 定义实体之间的联接表。
- 否另一个类需要映射。
使用外键映射的双向一对多关系:
- 使用 @OneToMany(mappedBy = "bar") 在所属类上。
- 在另一个类上使用@ManyToOne,并使用mappedBy 指向所属类。
双向多对多许多使用 Hibernate 托管连接表:
- 在两个类上使用 @OneToMany 来创建自引用关系。
- 使用 @JoinTable 定义连接表。
使用用户管理的联接表对象进行双向多对多:
- 在两个类上使用 @OneToMany 创建自引用关系.
- 定义一个单独的类作为连接表对象。
确定双向关系的“拥有”方:
- 通常,拥有另一个类集合的类被视为“拥有”方。
- 这决定了外键的存储位置以及哪个类管理更改。
选择 FetchType
- 延迟抓取(默认)仅在需要时加载相关对象。
- 急切抓取(设置 fetchType = FetchType.EAGER)加载立即关联对象。
通过使用 Hibernate.initialize() 或 FetchMode 避免 LazyInitializationException:
- 使用 Hibernate.initialize(person.getRoles() );急切加载延迟获取的集合。
- 在条件上使用 setFetchMode("roles", FetchMode.SUBSELECT) 来急切加载集合。
确定级联方向:
- 使用级联指定相关实体之间哪些操作(创建、更新、删除)级联。
- 如果需要,可以双向设置级联,但前提是在语义上有意义。
孤儿移除:
- 启用@OneToMany 上的 orphanRemoval 自动删除孤立实体(不再引用的实体)。
以上是如何在 Hibernate 4 中使用注释定义关系?的详细内容。更多信息请关注PHP中文网其他相关文章!