问题标签 [many-to-one]
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 - 用于多对一关联的 Hibernate L2 缓存
我对休眠有点陌生,正在尝试使用 ehCache 实现二级缓存。尝试使用 L2 缓存检索多对一关联时遇到问题。我的 foo.hbm.xml 文件中的关联映射如下所示:
(这是我的实际 hbm.xml 文件的一个非常缩短/修改的版本,希望其中没有错误)
请注意,我只缓存“bar”,而不是“foo”。但是,当我使用此映射运行单元测试时,出现以下错误:
严重:解析 XML 时出错:XML InputStream(40) 元素类型“多对一”的内容必须匹配“(meta*,(column|formula)*)”。
当我取出它时,它工作正常,只是没有 L2 缓存。仅仅是多对一的关系不支持缓存吗?如果是这样,关于如何解决这个问题的任何建议?
仅供参考,我有另一个单元测试直接读取“bar”(即不通过关联)并且它工作正常 - 第二次我得到一个“bar”它从 L2 缓存中获取它,所以我相当有信心我有其余配置正确完成。很抱歉,仍然在石器时代工作,所以没有注释等。
jpa - Eclipselink 在多对一关系中执行意外插入
我在两个对象之间有一个非常基本的关系:
DB 中只有一组有限的 StatusOfA。
我在事务中对 A 执行更新:
saveOrPersistA 方法在这里合并“a”。
我希望 Eclipselink 只对“a”执行更新以更新 StatusOfA,但它正在对 StatusOfA 表执行新插入。然后甲骨文抱怨独特的约束冲突(Eclipselink 试图坚持的 StatusOfA 已经存在......)。这里没有级联,所以问题不存在,Hibernate(在 JPA2 中)表现得异常。
在同一个项目中,我已经建立了一些更复杂的关系,我很惊讶地看到这里的关系不起作用。
在此先感谢您的帮助。
java - JPA多方关系删除操作
我想删除具有相同 ExternalProcessedFileInfo 的 ExternalProcessed 文件但此查询失败。当 Relation 恢复为 @onetomany 并在删除时级联时很容易,但我没有找到 ManytoOne 关系的任何有用示例。
这是我要运行的代码,它将为选择查询运行。
java - JBoss Envers 多对一审计
假设场景:我有两个模型:Author
和Book
. 该Book
模型对于 具有多对一关系Author
。
假设我只想审核对Book
. 我用 注释该类@Audited
,但收到一个错误,抱怨该getAuthor()
属性Book
无法被审计,因为Author
没有被审计。
为什么是这样?我想审核这本书的作者是否更改,但我不在乎作者昵称是否更改。在我的数据库中有一个author_aud
表是没有意义的,但显然这是不可能的,除非我继续审计Author
模型或用一个属性专门注释该getAuthor()
属性@Audited(...)
以忽略该关系。但是,如果我这样做,我将不再能够审核图书/作者关系。
c# - NHibernate 2.1.2 未保存的瞬态实例
我已经阅读了很多问题和答案,但我找不到我的问题的解决方案。当我从 NHibernate 1.2.1 迁移到 2.1.2 时,会出现问题。我有这个常见的错误:
对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。类型:Mikro.FareOn.Modules.Cards.Interface.BEC.CRResidenceRegion,实体:Mikro.FareOn.Modules.Cards.Interface.BEC.CRResidenceRegion
主类CRResidence的映射:
与多对一相关的类之一:
CRResidenceRegion 类的实现:
我尝试了所有类型的级联,但任何级联都无法正常工作。但就我而言,我更喜欢 cascade = "none"。我有客户端,通过在一个 NHibernate 会话中调用服务器端的方法来加载对象 CRResidenceRegion。加载 NHibernate 会话后关闭。客户端上的对象是正确的,数据库中的正确 ID 等等。然后给CRResidence对象赋值CRResidenceRegion对象。然后在服务器端调用方法:
我有很多这样的对象,当我迁移到 NHibernate 2.1.2 时出现了这个问题。在某些情况下,在定义级联样式后效果很好(“无”和“全部”一样有效,我需要)。可能是 NHibernate 的配置文件中的问题。
问题的先前定义:当我尝试插入或更新 CRResidence 的实例时,出现关于未保存的瞬态错误的错误。CRResidenceRegion的Instance完全初始化了,包括Id,所以没有问题。我在 Id 上实现了 Equal 方法。我试图清除缓存,但没有帮助。当我将级联更改为保存更新时,它可以工作,但是 CRResidenceRegion 的记录是重复的。一种解决方案是在保存 CRResidence 之前,我在同一会话中从数据库中读取 CRResidenceRegion(在下面的代码中注释),但这是不可接受的。
似乎 NHibernate 可能已经失去了对 CRResidenceRegion 的引用,并认为它是新创建的,但事实并非如此。
java - 如何对多对一关系强制执行孤立删除
如何在多对一关系上强制执行孤立删除,上面的代码片段在 Hibernate 3.3.x 中为我们工作,但在迁移到 3.6.5.Final 后它在代码中显示为警告。是否有类似 orphanRemoval = true 的等效标志应用于@OneToMany 符号?
java - 如何防止插入时不必要的选择?
我有以下场景(在 Java / Hibernate 中):
- 我有两个实体类:X 和 Y。X 与未级联的 Y 有一个 @ManyToOne 关联。
- 我创建了一个 X 的(非托管)实例 x 和一个 Y 的(非托管)实例 y,并在 x 中填充了对 y 的引用。y 中唯一填充的字段是主键。
- 实体 y 在底层数据库中已经有对应的行,但实体 x 是新的。
- 我坚持实体 x。
当我执行这个场景时,我希望看到一个查询:INSERT x。然而,实际发生的是 Hibernate 执行了两个查询:
- 选择 y
- 插入 x
此外,我还注意到,在 x 的持久化之后,对 y 的引用实际上并没有成为托管的,并且会话中没有 Y 的实例!那么,为什么要执行 y 上的 SELECT 呢?有没有办法防止这种行为?
jpa - 为 OneToMany 关系构造 JPA 查询
我有这两个实体
1)我想构建一个查询,说获取所有 A 至少有一个 B 名称为 =“mohamede1945”
2)我想构建一个查询,说获取所有没有名称为“mohamede1945”的B的A
有人可以帮我吗?
java - Hibernate @ManyToOne 删除一侧的条目,在多侧将 FK 设置为 NULL
我正在尝试学习使用 Hibernate,但可能我不理解@ManyToOne
和反向关系。我有两个实体Author
和Department
. 一个作者有一个部门,一个部门有许多作者。
当我删除作者时,部门不会发生任何事情。当我删除部门时,作者表中的 FK 应更新为NULL
值(不应删除作者)。
我找到了很好的倒置解释,并发现这Author
是一个拥有方,根据这个线程,当我删除子(部门)时,FK 应该设置为NULL
. 但它不会发生,因为只删除了 Department 并且 FK 保留在 Author 表中(这导致org.hibernate.ObjectNotFoundException: No row with the given identifier exists
)。
当我在实体中添加CascadeType.REMOVE
注释@OneToMany
时,Department
所有与部门相关的作者也会被删除。上述两种状态都是不可取的。我只想删除 Department 并将 Author 表中的 FK 设置为NULL
. 怎么做?
Author
和Department
带有注释的实体:
提前致谢
hibernate - Hibernate 中的多对一关系
我想在数据库的两个字段之间建立多对一的关系。我正在使用 PostgreSQL 数据库和 Hibernate。这些表是 ApplicationField 和 Device。第一个有 2 列:AppFieldId 和 Name。第二个有 NodeId、Description 和 AppFieldId。ApplicationField 的休眠映射是:
对于设备:
在 Java 类上,我在 ApplicationField 类上有一个 List devices,在 Device 类上有一个 ApplicationField appField。但是,当我尝试创建 sessionFactory 时,我得到一个异常,例如:
我应该如何处理表之间的关系?
非常感谢!!