Hibernate一对多注解怎么实现


这篇文章主要介绍“Hibernate一对多注解怎么实现”,在日常操作中,相信很多人在Hibernate一对多注解怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate一对多注解怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!使用JPA注释的一对多映射示例,它是XML的替代方法。简单来说,一对多映射就是将一个表中的一行映射到另一个表中的多行。让我们看一下下面的实体关系图,看看一对多的关联:对于此示例,我们将实现一个购物车系统,其中每个购物车都有一个表,每个项目都有另一个表。一个购物车可以有很多物品,所以这里我们有一个一对多的映射。这在数据库级别的工作方式是我们有一个cart_id作为cart表中的主键,还有一个cart_id 作为items中的外键 。我们在代码中执行此操作的方式是使用@OneToMany。让我们 以反映数据库中关系的方式将Cart类映射到 Item对象的集合:我们还可以 使用@ManyToOne在每个 Item中添加对Cart的引用,使其成为 双向关系。双向意味着我们能够访问 来自购物车的物品,也可以访问 来自物品的购物车。mappedBy属性用于告诉 Hibernate 我们使用哪个变量来表示子类中的父类。以下技术和库用于开发实现一对多关联的示例 Hibernate 应用程序:JDK 1.8 或更高版本休眠5Maven 3 或更高版本H2数据库(1)数据库设置我们将使用 Hibernate 从域模型中管理我们的模式。换句话说,我们不需要提供 SQL 语句来创建各种表和实体之间的关系。因此,让我们继续创建 Hibernate 示例项目。(2)Maven 依赖项让我们首先将 Hibernate 和 H2 驱动程序依赖项添加到我们的pom.xml文件中。Hibernate 依赖项使用 JBoss 日志记录,它会自动添加为传递依赖项:休眠版本5.6.7.FinalH2驱动版本2.1.212请访问 Maven 中央存储库以获取最新版本的Hibernate和H2依赖项。(3)休眠会话工厂接下来,让我们为我们的数据库交互创建 Hibernate SessionFactory :与映射相关的配置将使用模型类中的 JPA 注释完成:请注意,@OneToMany注释用于定义Item 类中的属性,该属性将用于映射mappedBy变量。这就是为什么我们在Item 类中有一个名为“ cart ”的属性:同样重要的是要注意@ManyToOne注释与Cart类变量相关联。@JoinColumn注释引用映射的列。在测试程序中,我们正在创建一个带有main () 方法的类,用于获取 Hibernate Session,并将模型对象保存到实现一对多关联的数据库中:这是我们测试程序的输出:正如我们在第 2 节中看到的,我们可以通过免费云主机域名使用@ManyToOne注释来指定多对一关系。多对一映射意味着该实体的许多实例映射到另一个实体的一个实例——一个购物车中的许多物品。@ManyToOne注释也让我们可以创建双向关系。我们将在接下来的几小节中详细介绍这一点。(1)不一致和所有权现在,如果Cart引用了Item,但 Item 又没有引用Cart,我们的关系将是单向的。这些对象也将具有自然的一致性。但在我们的例子中,这种关系是双向的,带来了不一致的可能性。让我们想象这样一种情况,开发人员想将 item1添加到 cart1 实例,将 item2 添加到 cart2 实例,但是犯了一个错误,导致cart2和item2之间的引用变得不一致:如上所示,item2引用了 cart2,而cart2 没有引用item2,这很糟糕。Hibernate 应该如何将 item2保存到数据库中?item2外键会引用cart1还是cart2?我们使用关系拥有方的想法来解决这种歧义;属于拥有方的引用优先并保存到数据库中。(2)物品作为拥有方正如JPA 规范第 2.9 节中所述,将多对一方标记为拥有方是一种很好的做法 。换句话说,我将是拥有方,而Cart是 反方,这正是我们之前所做的。那么我们是如何做到这一点的呢?通过在Cart类中包含mappedBy属性,我们将其标记为反面。同时,我们还对Item进行了注解。带有@ManyToOne的购物车字段,使 Item 成为拥有方。回到我们的“不一致”示例,现在 Hibernate 知道item2的引用更重要,并将 item2的引用保存到数据库。让我们检查一下结果:尽管cart在我们的代码片段中 引用了item2 ,但 item2 对 cart2的引用保存在数据库中。(3)购物车作为拥有方也可以将 一对多的一方标记为拥有方,将 多对一的一方标记为反方。虽然这不是推荐的做法,但让我们继续尝试一下。下面的代码片段显示了 一对多端作为拥有端的实现:请注意我们如何删除mappedBy元素并将多对一@JoinColumn 设置为可插入且可更新为false。如果我们运行相同的代码,结果将相反:如上所示,现在item2属于 购物车。到此,关于“Hibernate一对多注解怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: C#如何实现模拟ATM自动取款机功能

今天小编给大家分享一下C#如何实现模拟ATM自动取款机功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。该类包含与卡号、密码、可用余额、总余额相…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 04/04 10:35
下一篇 04/04 10:43

相关推荐