问题标签 [hibernate-onetomany]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3703 浏览

java - Hibernate - OneToMany - 多列

我有这两张表老师和联系人,一个老师可以有 x 个联系人。所以在这里我们正在查看@OneToMany 关联。

表结构:

用户 [userid, username, email,...]
联系人 [contactid, contactname, ref, reftype,...]

我想从我的用户类中加载所有用户的联系人。为此,我会做一个类似的查询

8240 是一个随机用户 ID,引用类型 T 是教师。由于此联系人表也用于学校联系人和/或我们可能拥有的任何其他类型的客户。问题是我不知道如何用 Hibernate 做到这一点。 我应该使用 embedbedId 吗?还是一个 JoinColumns?

到目前为止,我所做的是将我的老师与联系人联系起来,contact.ref=teacher.teacherid但我想要的是:

我怎么做?

这是我的代码 Teacher.class

联系人.class

0 投票
3 回答
38096 浏览

hibernate - JPA 注释中的 inverse=true

在我的应用程序中,我使用 JPA 2.0 和 Hibernate 作为持久性提供程序。我在两个实体之间有一对多的关系(使用 a@JoinColumn和 not @JoinTable)。我想知道如何在 JPA 注释中指定inverse=true(如 中所指定hbm.xml)来反转关系所有者。

谢谢你。

0 投票
2 回答
157001 浏览

hibernate-mapping - 如何将“insert='false' update='false'”映射到也用于一对多 FK 的复合 ID 键属性上?

我正在使用现有数据库模式处理遗留代码库。现有代码使用 SQL 和 PL/SQL 在 DB 上执行查询。我们的任务是使项目的一小部分数据库引擎不可知(起初,最终改变一切)。我们选择使用Hibernate 3.3.2.GA和“*.hbm.xml”映射文件(而不是注解)。不幸的是,更改现有模式是不可行的,因为我们无法回归任何遗留功能。

我遇到的问题是,当我尝试映射单向、一对多关系时,FK也是复合 PK 的一部分。这是类和映射文件...

公司实体.java

公司名称实体.java

公司名称实体.hbm.xml

此代码适用于具有名称的公司的 SELECT 和 INSERT。当我尝试更新和现有记录时遇到问题。我收到了 BatchUpdateException 并且在查看了 SQL 日志后,我看到 Hibernate 正在尝试做一些愚蠢的事情......

Hibernate 试图在更新子记录之前解除关联。问题是该字段是 PK 的一部分并且不可为空。我发现让 Hibernate 不这样做的快速解决方案是将“not-null='true'”添加到父映射中的“key”元素。所以现在可能映射看起来像这样......

公司名称实体.hbm.xml

这个映射给出了例外......

我现在的问题是我试图将这些属性添加到 key-property 元素,但 DTD 不支持。我也尝试将其更改为键多对一元素,但这也不起作用。所以...

如何将“insert='false' update='false'”映射到也用于一对多 FK 的复合 ID 键属性上?

0 投票
0 回答
2261 浏览

hibernate - HIbernate - “外键引用列数错误。应该是 2" 错误

我一直在寻找这个问题的解决方案一段时间。我发现一些线程谈论导致此问题的多对多关系,但我认为这不适用于我的情况,因此我将其发布在新线程中。

我有以下数据库设计:============================================ ====================================

用户表:PK USER_ID, USER_NAME UNIQUE, ...

项目表:PK ITEM_ID,FK ITEM_SELLER -> 与 user.USER_ID 的多对一关系,FK ITEM_BUYER -> 与 user.USER_ID 的多对一关系,...

投标表(用户和项目之间的桥梁):PK BID_ID,FK BIDDER_ID -> 与 user.USER_ID 的多对一关系,FK ITEM_ID -> 与 item.ITEM_ID 的多对一关系,...

类别表:PK CAT_ID,...

item_category 表(类别和项目之间的桥梁):PK ITEM_CAT_ID,FK ITEM_ID -> 与 item.ITEM_ID 的多对一关系,FK CAT_ID -> 与 category.CAT_ID 的多对一关系,...

==================================================== ==============================

我正在尝试通过 NetBeans 使用休眠进行设置。我找到了指导我设置 hibernate.cfg、reveng 和 util 文件的教程,并向我展示了如何使用 NetBeans 工具生成 POJO。在本教程中,您应该右键单击 cfg 文件并运行 HQL 查询以确保一切正常。我已经使用一个简单的表(上面的用户表)测试了这个过程,并且一切正常。但是,当我尝试将所有内容放在一起时,出现以下错误:

org.hibernate.AnnotationException: A Foreign key refering GavelDB.User from GavelDB.Bid has the wrong number of column. should be 2 at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:276) at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:89) at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:499) at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:304) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)

正如我之前所说的,我之前搜索这个问题的所有尝试都指向了复合键,但是我已经努力在这个设计中避免它们,所以我不知道这会是什么问题。我是休眠新手,所以我还没有从头开始编写文件的知识库。如果有人能给我一些见解,将不胜感激。提前谢谢!

以下是错误中提到的两个文件供您参考:

BID.JAVA

项目.JAVA

0 投票
3 回答
4556 浏览

hibernate - Hibernate inverse=''true" 和获得一对多时的问题

我正在尝试使用以下映射:

但是,当 inverse 设置为 true 时,项集始终为空。但是,当我将 inverse 设置为 false 时,它​​可以正常工作。似乎我错过了什么。任何解释都非常感谢。

添加:

抱歉耽搁了,我对代码做了一些更改,但我仍然面临一个问题:我正在将包含 3 个项目的类别保存到数据库中,但是当我检索该类别时,它只包含一个项目。这是代码:

提前致谢。

编辑(由 Stefan Steinegger 根据作者的评论)

测试用例:

0 投票
1 回答
927 浏览

spring - Spring Roo Master/Detail & @OneToMany

参考Spring Roo 的 @OneToMany 注释问题<field:select...解决方案适用于 create & update.jspx。知道如何让它为 show.jspx 工作吗?

0 投票
1 回答
782 浏览

java - Hibernate:映射@OneToMany 关系的最后一行

我在元素和它的名字之间有关系。所有历史名称以及当前名称都位于具有字段“created”的表“element_name”中。最后创建的行是元素的当前名称。

如何将元素的当前名称映射为元素的属性?

提前致谢!

0 投票
1 回答
341 浏览

performance - 一对多双向性能问题

我有一个疑问,那就是当我们将一对多创建为双向时。我们将在子类中放置一个父类引用。

看代码。

人.java

地址.java

这里Person.java是父类,Address.java是子类。当我们从数据库中获取父对象时,它正在加载子类。没事。没问题。

但反之亦然。如果我们正在获取子类,它也持有父类(person)

例如:我们通过地址 id 获取地址。假设从数据库中检索到 100 个地址。

但在地址类人员变量中也保存了父(人员)对象。

我的疑问就在这里

是使用不同的 100 人的记忆 。具有相同的数据。在地址类中。?

我的道就是这样。

假设 addrssList 的大小为 100。

这里per1, per2 .... 和 per 99使用相同或不同的内存。

如果相同就可以了。否则它可能会导致更多内存利用率的任何执行问题。?

请帮助...

0 投票
1 回答
3658 浏览

parent-child - 基于子表的一对多分离条件父表获取

我在使用休眠的一对多映射中遇到了一个问题。

我有 2 个班级,PersonAddress。人员由地址映射(一对多)我想获取地址 =“xxxx”的所有人员;。如何使用DetachedCriteria准备此查询。下面我从我的 dao 类中添加了一段代码。请帮我完成它。

人.java

地址.java

我的 DAO

select * from person where Address.address = "xxxx"; 如何使用DetachedCriteria实现这一点 ?

0 投票
3 回答
3832 浏览

java - Hibernate @OneToMany 关系映射

我正在尝试设计某种用户与用户的关系,例如“用户 A 关注用户 B”和“用户 A 想成为用户 B 的朋友”。

我有一个 User 类,它的设计方式如下所示:

我遇到了两个问题:

  • Hibernate 给了我不能同时获取多个包的问题
  • 我在网上查了一下,有人说要删除 FetchType.EAGER 或将其更改为 Set 而不是 List,但这导致我的 Field 没有默认值

我感觉关系没有正确定义,而且我应该看到更多的表,因为现在我只看到 User 表和 User_User 表。


更新

下面创建 3 个表、朋友、关注者和请求者。与 5 个表相比,这是否有所优化?与 J4mes 先生的建议相比,这有什么优势吗?