问题标签 [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 - 使用连接子类时从 org.hibernate.Query.list 控制结果列表
我有一个 User 类,它使用 Hibernate 映射到数据库中的“USERS”表。还有一个类 ApplicationUser,它扩展了 User 类,并作为 Hibernate 中的连接子类映射到数据库表“APPLICATIONUSERS”。像这样:
我遇到的问题是,当我得到一个用户列表(其中一些可能是“普通”用户和一些应用程序用户)时,一切正常 - 我得到一个 List 对象,其中每个项目都是 User 或 ApplicationUser 对象。该方法(简化了一下,可能包含拼写错误):
但是,如果只找到一个用户,即 ApplicationUser,则该列表包含两个对象:一个 User 对象和一个 ApplicationUser 对象,代表同一个用户。这是一个问题,例如当调用方法期望每个列表项是不同的、唯一的用户对象时。
是否有一些替代方法可以手动检查这种情况,例如使用其他返回列表的方法,其中每个对象也代表不同的用户,当列表大小为一个时?
nhibernate - NHibernate - 每个子类继承的表导致“无效转换”异常
我有一个简单的每个子类的表继承,具有以下 NHibernate 映射
所以信用卡和银行账户都继承自“账单明细”。在我的域层中,我有以下声明:
上面的“unitOfWork.Context”属性只是让我可以访问 ISession 工作单元。当我运行应用程序时,我收到以下错误:
BillingDetail = 'unitOfWork.Context.BillingDetail' 抛出类型为 'NHibernate.PropertyAccessException' 的异常消息 =“无效的演员表(检查您的映射是否有属性类型不匹配);BankAccount 的设置器”
如果我在“var billingDetail...”语句中放置一个断点并运行程序来检查这个错误,我可以看到上面的消息。但是,如果我然后单击播放继续程序执行,而不是用上面的消息轰炸,程序运行成功并将所有数据输入数据库。如果不检查断点,程序就会崩溃(正如我所期望的,如果映射确实存在问题)。
似乎正在发生的事情是,每次看到“BankAccount”实体时都会出现异常,但所有 CreditCard 实体都很好。“OfType”是否有问题,它没有过滤掉 BankAccount 对象?
java - Hibernate 在使用注释时无法创建连接的子类表
我是 Hibernate 的新手,在使用 Hibernate 注释时无法创建连接的子类表。
这是我的代码。
这是主要课程。
并且 Staff 类扩展了 User 类。
当我运行单元测试时,我得到了错误。
这是错误。
非常感谢!
fluent-nhibernate - Fluent NHibernate - 混合每个子类的表和每个类层次结构的表
给出以下结构,
我将如何使用 Fluent NH 正确映射这些,使用每个子类表和每个类层次结构表的组合?我尝试了自定义 AutomappingConfiguration,但似乎在绕圈子:
在我的调查中,在我看来,在使用 FNH 时,鉴别器的使用是二元选择,而 HBM 能够同时拥有鉴别器列和子类。
c# - 子类上的 NHibernate (3.1) 子查询未加入基类表
以下是我遇到的一个实际问题的抽象。
映射:
以下无法对子查询内的joined-subclass进行连接:
Sql
抛出 GenericADOException 因为子查询中的 subs1_1_(例如 sub_table)没有 Foo。我必须在 Other 的映射中做些什么来使 Subs 与子查询中的 Base 完全结合吗?
java - 使用 Hibernate 加入子类,是否可以复制超级表和子表中的列*并*保持它们同步?
所以我有一个有趣的情况。我继承了一大堆代码,最初的开发人员决定放弃使用继承来支持枚举和 switch 语句......这是这种反模式的完美示例 现在是重构的时候了,我已经决定了最好的解决方法是提取一个由具有共享列的表支持的超类,然后使用连接的子类继承策略。到目前为止,一切都很好...
现在棘手的部分是该代码已经部署到生产系统中。因此,我重构的代码必须与那里的模式/数据向后兼容,并且在将来的一个版本之前,我不能开始从子类表中删除冗余列。不管你喜不喜欢,我将在一个发布周期的父表和子表之间有重复的列。
对我来说幸运的是,当它看到父表和子表之间有重复的列时,hibernate 并没有翻转。但坏消息是它不会更新两个表中的重复列。父表中的列已更新,但子表中的列已过时。
为了与当前代码向后兼容,我希望在两个表中都更新该列。这样,如果我们必须回滚发布并返回旧模式,实体的更新不会丢失。虽然我知道我可以通过触发器来解决这个问题,但我正在寻找一种纯代码解决方案,因为触发器有一个令人讨厌的习惯,即在雷达下飞行。
有没有人可以告诉我一种说服hibernate同时击中两列的方法?
我的课程的一个非常人为的例子是:
与要匹配的表:
插入新的子类实体时,子类表上的重复列将为 NULL。
非常感谢!
java - 使用注释时连接子类的未知实体问题
使用带注释的连接子类时遇到异常,我不知道如何更正,请帮助。
例外是:org.hibernate.MappingException:未知实体:B
代码:
A 类
B类
表
休眠.cfg.xml
测试类
例外:
fluent-nhibernate - 在 Fluent NHibernate Automapping 中更改连接类映射的列
我有遗产
实体是 NH 类的标准,其中覆盖了 Equals、GetHashCode 等方法。我使用 AutMap 重写 .IncludeBase()
我得到了 Fluent NHibernate Automapping
我想将连接子类中键列的名称从 UserEntityId 更改为 EmployeeId
我试试
但没有成功。
我现在使用来自 NuGet 包的最新 FNH:FluentNHibernate 1.2.0.712。此外,我还有更多的配置和约定可能会以某种方式影响忽略此配置,但我已经尝试了一个明确的解决方案,但结果相同。
nhibernate - 映射为连接子类的休眠多级层次结构无法使用基类属性
我有以下层次结构:
ClassB 有PropertyA。所有类都映射为每个类的连接子类。
映射解析没有错误,但是当我尝试运行查询时出现错误:
错误如下:
NHibernate.QueryException:无法解析属性:PropertyA of:ClassC
在持久化 ClassD 实例时,我似乎遇到了另一个相关错误,但我宁愿先修复这个错误。
为什么会这样?
inheritance - NHibernate 级联删除相关联的子类
我目前正在从事一个小型 PoC 项目,并决定将NHibernate用于持久性部分。
我定义了以下域实体:
- Location :表示位置的抽象类(位置树的根)
- FixedLocation:表示地理固定位置的抽象类(派生自 Location)
- Country : 代表一个国家(来自 Location)
- City : 代表一个国家内的城市(从 Location 派生,没有 Country 就不能在逻辑上存在)
要求:
- 所有位置最终都必须从位置派生(相对而言,所有位置后代将共享相同范围的数据库键)
- Country和City之间应该存在双向关系
- 删除应该在整个实体树中级联,例如删除一个国家也应该删除关联的城市
这是我映射上述类的方式
以这种方式映射这些类满足了上述要求,或者至少部分......
当我Delete()具有 2 个关联城市对象(例如位置 ID 2 和 3)的国家实体(例如位置 ID 1)时,会发生以下情况:
- FixedLocationId=1的记录从国家表中删除
- 从 Cities 表中删除FixedLocationId=2 和 3的记录
- LocationId=1的记录从 FixedLocations 表中删除
- 从 Locations 表中删除Id=1的记录
到目前为止,一切都很好,但是...
- LocationId=2 和 3的记录不会从 FixedLocations 表中删除
- Id=2 和 3的记录不会从 Locations 表中删除
我在这里做错了什么?这可以首先完成吗?
我尝试在标签中设置on-delete="cascade"属性,但这让NHibernate抱怨不允许循环级联......