首页  >  文章  >  Java  >  如何在 Hibernate 4 中使用注释定义关系?

如何在 Hibernate 4 中使用注释定义关系?

Patricia Arquette
Patricia Arquette原创
2024-11-03 10:33:02307浏览

How to Define Relationships in Hibernate 4 using Annotations?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn