问题标签 [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.
hibernate - 对 OneToMany 关系的 Hibernate Cascade 操作提供更新查询
Child 使用复合主键。代码是:-
根据上面的代码,我有一个父子一对多的关系。Child 包含一个复合键作为其主键。
我使用复合键填充子项,将其添加到父项,填充父项,并使用 session.save() 保存父项。这对 Child 成功执行了 insert 语句。同样,如果我尝试插入另一个 Child 对象,但包含与之前相同的复合键但不同的外键,然后尝试再次保存 Parent 对象,它实际上会使用新的 Parentid 更新 Child 中的现有行。
根据关系数据库,我的理解是子表中复合键的重复条目应该无法插入。但是,Hibernate 正在更新现有行,因为值相同 (??)。我尝试为复合键插入不同的值,它在子表中插入很好。
我希望我试图让你正确理解这个问题。两个表之间存在单向的一对多关系,其中更新发生在具有相同值的行上。
我很困惑是一对多还是复合键的问题。
hibernate - Hibernate 配置错误 - 使用注释的一对多关系
我浏览了许多视频和教程,解释了如何使用注释机制在休眠中配置一对多关系。我仍然收到此错误。
错误是:org.hibernate.AnnotationException:使用@OneToMany 或@ManyToMany 瞄准未映射的类:bean.Professor.coursesAssigned[bean.Course] 使用@OneToMany 或@ManyToMany 瞄准未映射的类:bean.Professor.coursesAssigned[豆.课程]
我的课程是:
教授.java
course.java 是:
java - 休眠:新的或旧的记录
我在表Result和ResultAux之间有一个 OneToMany 连接。我可以从Result检索一组ResultAux对象。之后,我将添加一些ResultAux对象进行设置,并在每个设置条目上使用合并将更改刷新到数据库中。像这样:
对于一些额外的操作,我需要知道设置一个新记录并将插入到表中,或者它是一个旧记录并且(修改与否)将被更新。我注意到ResultAux集的所有条目都已经有一个 ID,所以我不能像检查其他表一样检查它是否为null 。有没有办法确定这样的事情(最好不涉及额外的库)?
编辑:
hibernate - 更新 @OneToMany 集合时出现问题
我被困在我试图更新@OneToMany 映射的地步。
问题:我有 2 个实体:标准和任务。一个条件可以包含多个任务。
我正在尝试使用一组新任务更新现有标准。这需要删除所有现有任务并添加新任务。这是我的做法:
Hibernate 抛出异常:
抛出此异常是因为它没有删除现有任务。
如果我只删除所有任务,它可以完美运行并使用以下代码删除给定条件的所有任务:
在添加新任务和更多内容后,我尝试了使用合并的所有选项,但似乎对我没有任何用处。我被严重困在这里,并且肯定错过了 Hibernate 中非常基本的东西。
提前致谢。!
associations - 如何在不使用休眠标准或 hql 从一对多关联中获取集合的成员的情况下删除它?
我有一个来自机构 -> 课程的一对多关联, 一个机构可以处理多个课程。对于这个用例,考虑一门课程只能属于一个机构。
他们的地图存储在单独的表中
如何在不获取机构对象和关联集合的情况下使用 HQL 或 Hibernate 标准删除课程,以便同时删除映射表中的相应行。
spring - 实体退出@Transactional上下文时的Spring回调?
Spring 是否有任何钩子可以在事务上下文的出口处为每个实体调用实体上的方法或实体侦听器?
我们使用 Spring 和 Hibernate 来管理我们也为搜索编制索引的一堆实体。我们目前使用带有 Hibernate 的 @PreUpdate 方法的实体侦听器来在创建或修改实体时执行重新索引。当然,该事件仅在实体自身的一个或多个属性(即其数据库行中的值)被更新时触发。
当实体具有非平凡子属性的 @OneToMany 映射时,就会出现问题。当更新这些子属性之一时,不会在父实体上调用 PreUpdate 回调。
我们已经跟踪了属性的更新时间,但我们希望等到所有更新完成后再触发重新索引。进行此类重新索引调用的最佳位置是什么?PreUpdate 在大多数情况下运行良好,但这个问题让我想知道当实体离开 @Transactional 范围时是否存在挂钩。或者,当 OneToMany 孩子被持久化时,是否有一种休眠方式来触发父母的回调?
hibernate - Hibernate 分页的 OneToMany 关系
如何在 Hibernate 中映射多方需要分页的一对多关系?(即您有数百个或更多相关对象)
使用 OneToMany 注释(或其 xml 等效项)没有用,因为加载单侧对象会使用它检索所有相关对象,从而导致内存灾难(即使您使用延迟加载) .
一种可能的方法(我已经在使用)是在 DAO 实现中添加一个 getter 方法,您可以在其中引入分页参数。但是,我可以看到这并不理想,因为您失去了一些功能,如级联(例如,我必须在 DAO 类中包含 setter 方法来关联对象)。此外,您失去了一些 OOP 意义,因为单面对象没有检索其相关多面对象的方法。最好的解决方案是什么?
为了进一步说明我的观点,假设我有两个类,它们之间的关系如下: A has-many B.
我不能使用 OneToMany 注释编写 A.getAllB() 方法,因为有数百个 B 与A. 因此,为了对结果进行分页,我使用 getAllB() 方法创建了一个单独的 ADaoImpl 类,我可以在其中包含分页参数以一次仅返回一页数据。这个对吗?任何帮助将不胜感激。
java - 休眠、多对一和删除
假设您有一个从 A 类到 B 类的单向一对多关联,如下所示:
在数据库中,这些通过第三个表连接,保留它们的 ID。
现在,我想删除一个连接到 A 的 B 对象。A 有自己的存储库类,B 有自己的存储库类。
在我的项目中以类似设置完成此操作的方式是首先要求有问题的 A 删除有问题的 B,然后告诉EnitityManager
从数据库中删除 B。
这让我有点卡在两个选择之间,在我看来它们都不是最佳选择:
中的存储库方法
BRepository
处理从其连接的 A 中删除 B 以及通过EntityManager
. 我不喜欢这样,因为 B 的存储库类将不得不操作 A 对象。BRepository 中的存储库方法仅处理通过 EntityManager 进行的删除,由调用者将其从 A 的集合中删除。我更不喜欢这个,因为如果有人在没有先从 A 的集合中删除 B 的情况下调用存储库,它将严重失败。
在这两个中,我发现第一个是迄今为止最好的。但是,我真的不认为它是干净的。
Hibernate 中是否有一些构造允许在从数据库中删除时从它所属的任何集合中删除要删除的项目?(试图只删除 B 失败,因为包含它的 A 也加载到同一个事务中,所以它在事务结束时失败,当它试图存储被删除的东西时。)
(在 A 中添加会mappedBy
解决@OneToMany-mapping
问题吗?)
java - 我需要使用具有多对一关系的@Access=FIELD 注释吗?
我有分为几类的实体。每个实体可以属于许多类别,所以我有一对多的关联。
下面的 ORM 编辑是否正确:
我的具体问题是我是否需要使用 @Access 注释?如果我不使用它,那么 Hibernate 将如何知道不映射getParents
getter?