问题标签 [union-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.

0 投票
1 回答
438 浏览

nhibernate - 为什么 NHibernate 不将联合子类的子查询限制为特定的 id?

Ayende在他关于NHibernate Mapping – Inheritance的帖子中概述了各种 NHibernate 继承策略是如何工作的。他对 union-subclass 的解释显示生成的 SQL 是使用联合各种表的子查询。然后从中选择该子查询。

我不明白为什么在引用以这种方式映射的对象时,子查询不受引用的 id 的限制。我很担心,因为这似乎非常低效。随着公司和人员表中记录数量的增加,从每个表中选择所有内容将需要很长时间。简单地通过 Party 对象的 id 限制子查询将至少从每个表中获取特定记录,而不是所有记录,然后再进行限制。

为了更好地说明这一点,生成的 SQL 大约是:

引用特定方时,为什么生成的 SQL 不是

第二个似乎更有效,并且假设适当的索引不会受到不断增长的公司和人员表的损害。这个问题是由对我的问题的进一步研究引发的:如何映射一个 UnionSubclass 所以从中生成的查询是有限的

0 投票
2 回答
1673 浏览

c# - 为什么 NHibernate 不能在每个具体类映射的联合子类表中使用身份?

一些消息来源指出,NHibernate 不能将标识与每个具体类和联合子类的表一起使用。这是真的吗,这背后的确切原因是什么?

0 投票
1 回答
987 浏览

hibernate - 如何克服Hibernate中union-subclass生成SQL导致的性能问题

我正在使用 Hibernate 对 TABLE_PER_CLASS 继承策略的支持。功能方面它运作良好。每当发出多态查询时,Hibernate 都会为我的两个具体类 A 和 B 生成一个包含“union all”的 SQL。生成的 SQL 具有以下格式:

这种方法的问题在于数据库端的性能非常差。考虑到 C1 列是 ClassA 和 ClassB 的共享属性(派生自抽象父级),Hibernate 可以在两个子选择中插入 where 子句并显着提高性能。例如,

也可以在极限上做一些优化。我在我的 DAO 层中使用 Hibernate 标准 API。

拦截器,onPrepareStatment() 无法使用,因为参数不可见。在数据库上使用分区和可能的其他选项目前超出了范围,因为我们希望在此工作阶段避免特定于数据库的优化。

知道如何操纵休眠以提高性能吗?

0 投票
1 回答
907 浏览

mysql - Hibernate继承性能

我正在使用带有 MySQL 数据库的 Hibernate 3(我尝试使用 Hibernate 4,但没有更多成功)。我已经实现了一个 table-per-concrete-class 继承策略(联合子类)。

除了多态查询之外,它完成了这项工作。Hibernate 生成一个基于 UNION 的查询,其中“where”子句位于高级查询中:

当加载整个具体表内容时,这会导致性能非常差,而因为 pkey 是抽象父级的属性,所以可以在子选择中定义“where”子句。

所以目标是让 Hibernate 生成这种查询:

这样,查询会立即执行。

知道如何配置 Hibernate 来改变这种行为吗?

谢谢

Y。

0 投票
2 回答
1458 浏览

nhibernate - 如何使用 NHibernate 联合子类映射抽象属性?

在这里参考 Ayende 的帖子:http: //ayende.com/blog/3941/nhibernate-mapping-inheritance

我有类似的情况,可以通过向 Party 添加抽象的 Name-property 来扩展上述帖子的 union-subclass 映射。该模型如下:

我正在寻找一个允许我以下列方式查询各方的映射:

我正在使用的映射:

对彼此而言

这符合我的预期,我可以查询名称并获得匹配的结果。但是,当我这样做时

该查询根本不匹配 Persons,而是使用来自公司联合子类的映射。因此,当使用 Party 进行参数化时,查询似乎与使用 Company 进行参数化时基本相同(查询的 WHERE 子句是:WHERE this_.company_name = ((E'firstname lastname')::text))

关于我可能出错的地方以及如何实现我所追求的任何指示?

0 投票
1 回答
290 浏览

nhibernate - 以多态方式加载联合子类实体的集合 - 多次指定的列

采取以下实体:

在 NHibernate 中以如下方式映射:

如果我创建一个公司实体并将 IEmployee 实体添加到它的集合中(同时设置 IEmployee 实体的公司属性以创建双向关系),那么当我保存公司时,一切都按预期进入数据库。在 PoductionEmployee 和 SalesEmlpoyee 记录上正确设置了 companyId。

但是当我来加载它时,我收到以下错误:

为“employees0_”多次指定了“CompanyId”列

生成的 SQL 如下所示:

为什么它会生成两次 CopmanyId 列,我该如何防止这种情况?

0 投票
1 回答
3141 浏览

c# - Nhibernate:无法使用标识列密钥生成映射:

我有三个实体,其中Email&实体是从实体Sms继承的Message

映射:

,

,

这条消息我有一个例外: Cannot use identity column key generation with <union-subclass> mapping for: Core.Domain.Model.Message

我需要什么策略来生成Id而不是native?我希望 Id 的值是:1,2,3,4,5,6,... 1,3,5 用于电子邮件,2,4,6 用于 Sms

0 投票
0 回答
48 浏览

hibernate - 与休眠技术中的“每个具体类映射表”相关的问题

我试图用休眠来理解继承类型。

当我查看文档时,使用联合子类技术有“每个具体类的表”主题。对此我有一些疑问,

1)。为什么我们需要联合子类映射?
2)。我们什么时候实现联合子类?
3)。为什么我们不能为联合子类使用 id 生成器?
4)。与joined-subclass相比有什么优势?

0 投票
1 回答
1309 浏览

c# - 对象与目标类型不匹配。getter 发生异常

我有一个大问题!在 nhibernate 中映射具有多个联合子类的抽象类时,我不断收到异常。当我只使用一个联合子类时,我没有收到任何错误并且一切正常。当我使用更多子类时,会发生此错误:

[TargetException:对象与目标类型不匹配。] System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target) +10909543 System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfoculture) + 115 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfoculture) +54 System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo 文化) +61 System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index) +19 NHibernate.Properties.BasicGetter.Get(Object target) +99

[PropertyAccessException: MedControlWeb.Models.Logs.Log.Code 发生异常 getter] NHibernate.Properties.BasicGetter.Get(Object target) +183 NHibernate.Engine.UnsavedValueFactory.GetUnsavedIdentifierValue(String unsavedValue, IGetter identifierGetter, IType identifierType, ConstructorInfo 构造函数) +160 NHibernate.Tuple.PropertyFactory.BuildIdentifierProperty(PersistentClass mappedEntity, IIdentifierGenerator generator) +200 NHibernate.Tuple.Entity.EntityMetamodel..ctor(PersistentClass persistentClass, ISessionFactoryImplementor sessionFactory) +775 NHibernate.Persister.Entity.AbstractEntityPersister..ctor(PersistentClass persistentClass , ICacheConcurrencyStrategy 缓存, ISessionFactoryImplementor factory) +835 NHibernate.Persister.Entity.UnionSubclassEntityPersister..ctor(PersistentClass persistentClass, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping mapping) +220 NHibernate.Persister.PersisterFactory.CreateClassPersister(PersistentClass model, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping cfg) +369 NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping 映射、设置设置、EventListeners 监听器)+2199 NHibernate.Cfg.Configuration.BuildSessionFactory() +181ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners) +2199 NHibernate.Cfg.Configuration.BuildSessionFactory() +181ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners) +2199 NHibernate.Cfg.Configuration.BuildSessionFactory() +181

我的 hbm 文件:

我的抽象超类:

子类之一:

我哪里错了?

编辑:我能做些什么来解决这个错误?由于我有正确的 get 方法,我不知道如何修复它?

0 投票
1 回答
1725 浏览

c# - “NHibernate.ObjectNotFoundException:不存在具有给定标识符的行”访问子集合

小解释:我有优惠券系列和与该系列相关的优惠券。某些优惠券可能尚未激活,它们存储在单独的表格中。这是我的.hbm.xml文件:

删除一张优惠券后

,我正在获取系列中的优惠券列表(.First() 是为了简单起见)。

当我尝试枚举实体CouponSeries的儿童集合优惠券时,我得到了提到的异常,完整的调用堆栈如下所示:

有谁知道怎么回事?正如他们在许多主题中所建议的那样,我尝试将not-found="ignore"设置为many-to-one,但这与我的情况没有什么共同之处。