问题标签 [joined-subclass]
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.
java - 为什么hibernate在持久化由joined_subclass继承类型映射的实体之前选择实体?
我有超类 Person 和两个子类 - Parent 和 Child。它们使用 JOINED_TABLE 继承类型进行映射。
Parent 和 Child 具有双向的一对多关系。
Person.hbm.xml 包含所有配置:
当我坚持 Parent 和关联的 Child 实体休眠时,在插入之前会发出 select 语句。这些选择语句从子表和人员表中查询子实体的数据。
每次运行时都会重新创建数据库,并且没有可供选择的内容。
以下是保留 Parent 和关联的 Child 实体的 main 方法的摘录:
为什么那些 select 语句在 insert 语句之前?
sql - 如何避免对使用 JOINED 策略映射的实体继承的简单查询进行不必要的内部连接?
我使用 JPA 2 和 Hibernate 4.2.0-Final 作为提供者,我有以下实体:
我有以下 JPQL:
Hibernate 为其生成以下 SQL:
但我只需要计算具有不同代码的客户,这恰好是客户特定的字段,因此不需要内部连接到“人员”。我希望 Hibernate 生成如下 SQL(即不连接表“Person”):
有没有办法告诉 Hibernate 避免不必要的内部连接?也许是一些特定于 Hibernate 的查询提示?
hibernate - 联合继承策略中的多级继承,对层次结构中的每个父级使用鉴别器
在下面考虑我的课程
产品(抽象根类)
Car(另一个扩展 Product 的父类)
Speeder(扩展 Car 的层次结构的最后一个孩子)
当 JPA 使用鉴别器将我的对象模型映射到我的数据模型中时,在单个父子层次结构中使用鉴别器对我来说很好,鉴别器值已正确设置,但是当我添加了另一个层次结构级别时,即Speeder-extends- Car-extends-Product,判别器值或不能正常工作,
如果我只在单个继承(例如子到父)中使用使用鉴别器的联合继承,鉴别器值被正确映射到其受尊重的列中,但现在我添加了另一个层次结构,Speeder 的鉴别器值是放在Product 表的鉴别器列中,而Car表的鉴别器列保留为空值,希望您能理解我在这里要实现的目标,这可能吗?任何解决方法?周围有很多例子,但我找不到一个能说明更深层次结构的例子,像这样的例子加入继承表但是层次更深,周围的例子只有简单的层次,与其他使用这种策略的例子几乎相同。任何帮助或启发将不胜感激。
c# - 在 NHibernate 中获取每个子类的表对象
我遇到了一个名为 ScheduledJobs 的数据库表,其中包含大量列和一个匹配的 C# 对象,具有相等的大量属性。我对它的设计并不感到兴奋,并想使用每个子类的表策略来分解它。代替
我有
我重写了 NHibernate .hbm.xml 文件(没有流利,抱歉)来使用:
伟大的!我的麻烦是,我不知道如何明智地获取子类作业。一张大桌子的好处是不必担心类型或转换:
在我的设置中,我有相同的 ID(这应该足够了;它仍然是唯一的),但我不知道类型:我必须获取抽象作业,检查 JobTypeID,找到关联的 C# 子类,然后重新获取它子类。
如果需要,我可以引入 JobTypeID。我仍然必须将该 ID 与与之关联的作业子类表配对。
简而言之,我需要能够让我从 NHibernate 收到的 ScheduledJob 对象成为正确的子类,而我的干预尽可能少。在这里使用鉴别器的能力会很棒,但官方文档说不允许这样做。这种设计让我觉得我从根本上误解了一些东西;随时指出我正确的方向。
谢谢!
jpa - JPA - 在联合策略继承中覆盖 bean 验证
我有三个 JPA 实体:A、B 和 C。B 和 C 使用联合策略继承 A。是否可以覆盖子类中的 Bean Validation 约束?例如,我希望 B 在一个字段中具有 @NotNull 约束,而 C 在同一字段中具有 @Null 约束。
我想通过使用 Bean Validation 组来做到这一点,但是我不知道如何定义 B 必须用一个组验证,C 必须用另一个组验证。
说明问题的代码:
jpa - 使用继承时的 JPA @PrePersist 和 @PreUpdate 顺序
假设以下代码片段使用 @PrePersist 和 @PreUpdate 注释以及 Joined-type 继承:
问题:我们可以依赖回调方法的任何执行顺序吗?
例如,当持久化类 A 和 B 时,B 中的 prePersist 方法会在 A 中的 prePersist 方法之前执行,反之亦然?
我们可以假设 B 中的 prePersist 将在 A 类被持久化之前执行吗?
java - 如何在休眠中将连接子类设置为始终更新(即使仅更改了祖先)?
我在数据库中的连接子类上有一个更新触发器。它应该在每次数据更改时运行,即使更改的字段都在祖先类中。但是hibernate不会更新子类。即使那里没有任何改变,有没有办法让它更新它?
hibernate - 当扩展类仅包含嵌入集合时,休眠省略表
我目前正在使用继承策略 InheritanceType.JOINED。我的扩展类只包含一个 String 类型的 Map,它存储在自己的表中。我想知道是否有可能省略只包含 id 的扩展类的表。
如果不存在“省略”表格的直接选项,请告诉我您将如何对其进行不同的建模。
该示例显示我有一个基类“Attribute”,它由类“StringMapAttribute”扩展。这个extendend 类只包含一个集合。“StringMapAttribute”的表最后只包含“id”,即“Design Overhead”,所以我可以使用继承和建模不同的属性类型。因此,只有一个包含一个 id 列的表并不理想。
感谢您提供任何有用的提示。
java - Hibernate:获取 org.hibernate.InstantiationException 而在 onetomany 关联中获取多态集合
我正在尝试使用 JPA 注释在 Hibernate 中使用 JOINED 继承策略。我的基类是抽象的,并且与其他实体具有多对一关联。但是我得到了休眠异常:无法实例化抽象类或接口。以下是我的班级结构:
账户.java
SavingsAccount.java
分支类
因此,每当我尝试使用以下代码获取分支机构持有的帐户列表时,都会出现以下异常:
异常跟踪:
请帮助我了解我的代码有什么问题。如果我删除 abstract 关键字,它工作正常,但我想将 Account 类设为抽象。有什么办法可以做到这一点?
nhibernate - NIBerate 加入的子类无效属性
我正在尝试解决这个问题,其中子类包含一组属性,但是引用表中不存在其中两个属性。
这两个属性存在于一个扩展表中,该扩展表具有返回基表的 FK。我不确定如何修改此 xml 以支持第一个加入的子类并为扩展表添加另一个连接。
我试图简单地为扩展表添加另一个连接子类,但是由于类名相同,映射无效。
生成的最终查询失败,因为它尝试从不存在的 SESProgramAssociation 表中引用 EventCode 和 WrittenConsentDate。它们实际上存在于扩展表中。
我不确定如何修改此 xml 以将这些字段指向扩展表,以便生成的查询实际上从该表中提取它们而不是错误的。非常感谢任何帮助,这是我第一次体验 NHirate,不用说,这并不好玩!
在 Frédéric 的建议下,我更新了但得到了这个错误:
NHibernate.dll 中出现“NHibernate.MappingException”类型的异常,但未在用户代码中处理
附加信息:EdFi.Ods.Entities.NHibernate.Mappings.SqlServer.StudentProgramAssociationBase.hbm.xml(79,8):XML 验证错误:命名空间“urn:nhibernate-mapping-2.2”中的元素“joined-subclass”无效命名空间“urn:nhibernate-mapping-2.2”中的子元素“join”。预期的可能元素列表:'属性、多对一、一对一、组件、动态组件、属性、任何、映射、集合、列表、包、idbag、数组、原始数组、连接子类,加载器,sql-insert,sql-update,sql-delete,结果集,查询,sql-query'在命名空间'urn:nhibernate-mapping-2.2'中。