问题标签 [table-per-class]

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 回答
541 浏览

nhibernate - 如何使用流利的 nhibernate 创建每个类的表映射?

我正在尝试使用流利的 nhibernate 创建类似于以下内容的映射:

关于如何做到这一点的想法?

0 投票
2 回答
350 浏览

inheritance - 使用 NHibernate 从数据库中填充大树时的表每个子类策略

我正在使用 NHibernate 加载不同类型的对象的大树。映射是使用 table-per-subclass 策略实现的。我定义了一个基类“Node”,它只有几个字段(NodeId、ParentId、NodeType)和几个从 Node 继承并添加自己的字段的子类。

这种方法的实现很简单,我不能抱怨性能。一棵由 10 000 个不同类型对象组成的大树在几百毫秒内使用单次往返填充到我的旧机器上。然而,有一件事情让我担心:这种策略会导致生成一个复杂的查询,其中节点表与对应于已定义子类的所有其他表进行外部连接。虽然当不同子类的数量很少时这很好,但如果数量增加,OUTER JOIN 复杂度也会增加。

为每个类定义表似乎不是一个优雅的选择,当从基类中选择数据时它会运行缓慢(因为 UNION)。其他选项似乎增加了到数据库服务器的往返次数。

那么,当填充由不同类型的实体组成的大树时,您认为最佳实践是什么?有什么比每个子类的表更好的吗?

0 投票
1 回答
9951 浏览

java - Java/Hibernate JPA:InheritanceType.TABLE_PER_CLASS 和 ID

我正在使用休眠 JPA。

假设我有这些课程:

有没有办法让具体的类有独立的ID?

我正在使用 InheritanceType.TABLE_PER_CLASS。

0 投票
2 回答
1409 浏览

nhibernate - 您可以在 nhibernate 中从基类更改为连接的子类类型吗?

我有文档扫描系统,可以扫描多种类型的文档。最初,文档在扫描时没有任何信息,然后它们被分类并在稍后的第二步中为它们输入附加信息。因此,我有一个名为 Document 的基类,以及每种类型的子类及其各自的元数据,如下所示。我将它设置为 NHibernate 中的每个子类(加入的子类)映射。

我需要做的是首先创建一个 Document 类并保存它。然后稍后在第二步中检索并将其转换为子类类型之一并填写其其余信息。最好的方法是什么,NHibernate 甚至可以做到这一点吗?如果可能的话,我想保留原始文件记录,但如果我不得不放弃它,它不会破坏交易。

0 投票
2 回答
9072 浏览

inheritance - JPA TABLE_PER_CLASS 继承:如何只选择超类条目?

我使用 EclipseLink 作为 JPA 提供程序。此外,我正在使用以下 TABLE_PER_CLASS 继承结构

现在的问题是我只想接收父类的条目。但是使用命名查询“SELECT p FROM Parent p”也会返回子表中的所有条目。

选择或查找代码如下:

因此查询即“SELECT p FROM Parent p”。

我怎样才能只收到真正的父条目而不是这个继承层次结构的所有条目?

简而言之:如何保持所有子条目不变,只返回父条目?

编辑 1:
我使用的是 EclipseLink 2.0.1,但每次我通过类型表达式尝试 axtavt 的解决方案时,都会收到以下错误:

我也更新到 EclipseLink 的最新稳定版本 2.1.1,但它并没有解决问题。

0 投票
1 回答
1807 浏览

c# - 操作方法:从同一个表映射(NHibernate)具有不同业务逻辑的多个类?

我目前正在使用一个棕地数据库,其中包含一个包含 3 种不同业务类型的数据的表。它与 SalesOrders 和 orderlines 有关。在旧应用程序中,我们能够为每个销售订单添加 3 种类型的订单行:产品、小时费率和文本行。15 年前,这是一种快速而肮脏的解决方案,可以在 Delphi 中轻松查询以在一个数据网格中获取所有行。每一个

现在我正在尝试使用 NHibernate 在 C# 中构建对象模型。我已经制作了 3 个没有基类的单独实体,因为这 3 种线型没有真正的业务逻辑连接。但是,我想将这 3 种类型放在一个列表中,以便我可以订购它们。

我考虑过使用继承,每个类的表,因为表满足要求(没有非空约束的列)。但这不是一个合乎逻辑的步骤,因为每种类型的业务完全不同(只有共同点是用户 ID、描述和备注)。也许是一个组件?但是如何将属性映射到 3 个没有基类或除表名之外的任何类型的链接的不同类?

我希望你们能理解我写的东西。我还没有真正的代码,我只是在纸上画了一些关于如何处理这些代码的东西。

这里有人可以帮助我吗?

亲切的问候,特德

0 投票
1 回答
2393 浏览

hibernate - 带有 @MappedSuperclass 的休眠 TABLE_PER_CLASS 不会创建 UNION 查询

我正在尝试创建一系列对象,这些对象都存储在单独的表中,但所有这些表上都有一组共同的字段。我希望 Hibernate 对所有这些表进行 UNION,但不包括超类作为表。

当我只用注释超类时:@MappedSuperclass @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

...hibernate 将为超类的 (n) 个子类型分别运行 (n) 个查询。

当我删除@MappedSuperclass 而将@Entity 放在超类上时,Hibernate 将执行花哨的 UNION 查询,但将超类作为表包含在 UNION 中(超类没有表)。

如何在不将父类设为 @Entity 的情况下将所有子类(而不是单独的查询)放在 UNION 中(因为它不是实体,所以没有表)?

0 投票
1 回答
1717 浏览

jpa - ManyToOne 的 JPA TABLE_PER_CLASS 问题

我有以下层次结构

我还有一个类,Tr 引用了两个具体的子类

使用上面定义的类,延迟加载可以正常工作:

但是,如果我尝试执行多态查询,它就不起作用:

我收到一个错误:

订单未映射

基于这篇文章:http: //java.dzone.com/articles/jpa-implementation-patterns-mapping

顺便说一句,当使用 Hibernate 代理时,请注意延迟加载使用上述三种策略中的任何一种映射的类总是返回一个作为超类实例的代理。块引用

这与我看到的奇怪行为相匹配。

然而,这就是它变得奇怪的地方。如果我将父类更改为

那就是我注释掉 MappedSuperClass 注释,多态查询有效(创建正确的联合)。问题是当我这样做时,从 Tr 到两个子类的 LAZY 加载停止工作。

有任何想法吗?我可以只使用本机查询而不是 JPA 来执行联合吗?

我正在使用 Hibernate 在 JBoss 6.0.0 中使用 JPA 2.0 - JBoss 附带的任何版本

0 投票
2 回答
3086 浏览

nhibernate - 当基类在流利的nhibernate中是抽象的时,如何实现每个具体类的表?

我有以下情况

对于映射,我使用了以下代码片段:-

默认情况下,fluent 将忽略抽象基类 BaseClass。但是在ProcessStep类中有返回IList的属性 ContentElements ,我得到一个异常:- NHibernate.MappingException :关联引用未映射的类:BaseClass

如果我使用 IncludeBase(typeof(BaseClass)) 包含基类,那么它可以正常工作,但它会为 BaseClass 和 Derived 类创建一个表,并且记录与 FK-PK 关系链接(每个子类的表)。我想要实现的是每个具体类的表。也就是说,每个派生类都有自己的表,其中将有派生类的所有属性+基类中的属性。知道如何实现吗?

0 投票
1 回答
2859 浏览

java - Hibernate:每个具体类的表与每个子类的表

我正在为我当前的项目(Java)计划/设计我的数据库。对于这个项目,我将使用休眠。

在我的项目中,我有一个名为 Command 的基类/接口。事实上,Command 类只包含一个字段 id(唯一)。

因此,Command 的每个子类的共同点是一个唯一的 id 和一个名为 execute 的方法,该方法由子类实现。

存在许多子类,如 MoveCommand、ResizeCommand 等,它们没有公共数据字段(id 除外)。

例如:

然后我有另一个名为 Document 的类,其中包含命令列表

因此,在运行时执行了许多基类“从命令中选择”的查询。

我的问题是:在这种情况下我应该使用什么样的继承策略来获得最佳性能。

在 SQL 中:在这种情况下,JOIN(每个子类的表)或 UNION(每个具体类的表)性能更好吗?

有没有人有这个话题的经验?

我猜每个子类的表会是更好的(设计)解决方案,但我不确定,因为存在一个具有单列(id)的数据库表,因为这是命令唯一的共同点。