问题标签 [table-per-hierarchy]

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

c# - nHiberbate:每个层次结构的表 - SchemaExport 问题

我正在使用 nhibernate 来映射以下类:

使用以下映射文件:

我正在对表进行按层次结构数据建模的表,如下所示:

这一切都很好,并且适用于我的 SQL 数据库。

我现在想做一个 SchemaExport 来针对 Sqlite 进行一些内存测试。当我使用模式导出生成此表时, SmtpServer 和 SmsServer 列都生成为not null

有什么我做错了吗?如何让这些列生成为可为空的?

谢谢,

保罗

0 投票
1 回答
583 浏览

entity-framework - EF 4.1 中具有多个可空鉴别器的每个层次结构的表布局问题

我有一个带有 int PK、一个 NOT NULL 字段和两个 NULL 字符串字段的表。

当我在 EF 中设置 TPH 风格的设计时,我是这样设置的:

顶级类型只有 PK 和 NOT NULL 字段。

第一级检查第一个可为空的字段作为鉴别器。not null 结果类型是抽象的。我相应地映射了该字段。

我对第二个字段再次执行此操作,再次映射不为空的位置。我在我映射的字段上设置了 nullable = false。

我得到“具有不同键的两个实体映射到同一行。”

我在想这是因为第一项的 not null 属性可能没有被孩子继承。

我创建了第三种类型来尝试处理 NullField1 为 null 而 NullField2 不为 null 的情况(这在我的数据库中不会发生,我有一个约束),但即使我添加了它也不起作用.

在 2 个子子项中的任何一个上显式添加非空条件需要我映射列,即使我将其映射到一些无关的属性,它仍然不起作用。

“BothNullItem”的条件组合都不起作用。

有任何想法吗?

0 投票
1 回答
546 浏览

java - Getting DAOs for Table-per-Hierarchy structure

Let's assume I have a User class and two subclasses Employee and Customer. I implemented this hierarchy as a table-per-hierarchy in DB with a column for specifying the type of user. I need to return the right type of object when querying this table.

Do I need separate DAOs for each type of object like CustomerDAO or EmployeeDAO, so each return their respective Customer and Employee objects. If so how to get them from DAOFactory without using:

Because the types implementing User could change and I don't want to change conditions every time.

Or is there any other way? Any idea would be appreciated.

Note: I'm not using any ORM framework and not planning to use one.

0 投票
1 回答
2568 浏览

inheritance - Grails继承映射中的鉴别器问题

我有 4 个类 A、B、B1、B2,其继承映射描述如下:
A(映射到表 A)是最顶层的父类,它的继承映射策略是tablePerHierarchy=false(意味着它的每个子类都映射到一个单表)。
B类从A扩展,B1,B2从B扩展。但是B1和B2与B共享同一张表,所以在B类中,我声明tablePerHierarchy=true了一个区分B1和B2的鉴别器。
详细代码在这里:

当我启动我的应用程序时,发生了一个错误:

我已经按照 Grails 文档中关于鉴别器的说明(http://grails.org/doc/latest/ref/Database%20Mapping/discriminator.html),但它没有用。我在这里找到了关于此文档问题的 JIRA:http: //jira.grails.org/browse/GRAILS-5168并在他们评论时修复了我的代码,但仍然出现相同的错误。

我不知道导致此问题的原因。B 中的 tablePerHierarchy=true 是否覆盖了 A 中定义的策略?
你能帮我解决这个问题吗?太感谢了。

0 投票
2 回答
1025 浏览

entity-framework - 每个层次结构 (TPH) 的 EF 表未保存,因为无法在鉴别器列中插入值 null

我有一个用于多类型类别的表,它包含一个名为“ClassName”的鉴别器列,以指定要加载的对象类型。ClassName 列不可为空,默认值为“Category”

我的问题是在保存新项目时出现错误:“无法将值 null 插入列 ClassName”表类别中。

我认为 ef 会根据新的对象类设置 ClassName 值。如何使用正确的“ClassName”值保存我的对象?

0 投票
2 回答
10511 浏览

java - 判别器公式

如果我有一个表需要多个列作为鉴别器,那么我唯一的解决方案是使用@DiscriminatorFormula 吗?

我问是因为一些原型设计给了我们一些我无法解释的结果。

失败的原型:最初,我们使用超类上的一个 @DiscriminatorColumn 并在子类上包含第二个 @DiscriminatorColumn 来构建一个 3 深的类层次结构的原型。当然,我们得到了这个警告:

鉴别器列必须在根实体中定义,在子类中将被忽略

我们发现更新有效,但插入无效。所以我们放弃了这个想法。

成功的?原型: 然后我们尝试了以下似乎可行的方法:省略子类上的第二个@DiscriminatorColumn,只在外键上包含@JoinColumn(无论如何我们都需要它)。也许,由于连接是针对不同类型的对象,Hibernate/JPA 似乎能够找出哪个子类是正确的。谁能解释一下?

我们是否应该放弃它并只使用@DiscriminatorFormula 来获得在 2 个鉴别器列上定义的显式关系?

0 投票
1 回答
3345 浏览

nhibernate - TPH vs TPT vs TPC 和 OR 映射器

我正在研究一个数据模型,该模型具有一组共享一些常见字段(例如 Id、Name、Description)的类型。更具体地说:

Document 类有一个属性列表。这些属性在我们的域中,类型如 String、Integer、DateTime 和更“复杂”的类型,如 Address 和 String、Integer、Address 等列表。现在,在我的脑海中,我将对 Attribute 类进行建模,以便我有一个抽象基类 (AttributeBase),它包含公共属性(Id、Name、Description),然后在相应的子类中具有更具体的属性。例如 StringAttribute (Value)、IntegerAttribute(Value)、AddressAttribute(Street 等)、StringListAttribute、IntegerListAttribute、AddressListAttribute。我们谈论的是 15-20 个不同的子类。但是您将如何在数据库中对这些类进行建模?你会选择 TPH、TPT 还是 TPC?我已经阅读了有关选择 TPT 和 EF 4.1 并为 TPH 设置一个 massiv 表时的性能损失的信息' 即使性能更好,对我来说听起来也不错。我们正在讨论表中可能有 10000 - 1000000++ 行数据。

当涉及到这些场景时,您有任何第一手经验吗?我真的很想从你这里谈谈这个问题。

0 投票
1 回答
777 浏览

sql - EF : MVC : ASP: TPH 错误 - 存储更新、插入或删除...行数 (0)。实体...修改或删除...刷新 ObjectStateManager

错误消息:“存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体以来,实体可能已被修改或删除。刷新 ObjectStateManager 条目。”

大家好,

我在 MVC 和 EF 中使用 SQL 紧凑型数据库创建了 Code First TPH(Table Per Hierarchy)。

这是类图/层次结构:

类图

Client 和 SalesRep 都继承了 BaseUser 类。密钥是“UserID”,它是用数据注释编码的[Key](我知道“ID”也应该设置它)

这就是我所在的位置:我可以用一些条目为数据库播种。当我尝试在播种方法中设置“用户ID”时,它似乎忽略了它,只是按数字顺序应用用户ID......(对我来说似乎没问题?)

此外,这是我的 DbContext

下一个,

我为 Clients -> ClientsController 创建了一个具有强类型 Razor 视图的控制器。有了这个。我现在有一个客户的 CRUD。我可以毫无问题地创建新客户端,但是当我尝试编辑客户端条目时,我收到上述错误消息。

我确实注意到了一些有趣的事情,我单步执行了代码,并且错误发生在 db.SaveChanges();

当客户端被传回 ActionResult Edit 方法时,UserID=0!奇怪吗?我不确定这是一个错误还是导致此问题的实际问题。

用户 ID=0

感谢您对此提供的帮助。谢谢!

0 投票
2 回答
757 浏览

vb.net - Entity Framework 4.2 table per hierarchy group by discriminator

I am working on a project using an EF 4.2 code first model. This model contains a TPH inheritance structure for products. I need to group the polymorphic results of this inheritance model on the discriminator and am running into some issues.

The entity framework does not expose the discriminator to complete this grouping. My first question is can I get direct access to this discriminator? My reading and experience is telling me no, so I came up with this solution that sort of works. It is not performing well and I am not happy with how it will need to be maintained.

My classes look something like this (simplified):

I built an extension method that takes a product and returns it's basetype name as a string.

With that, I built this structure to group the results of product by type so I can run through them:

I can now loop through the list to get the behavior I want, but the performance is not ideal and I am concerned it will be unacceptable as the number of products grows.

Also, this can give me easy access to shared properties (Name) but now I don't have many options to cast these into their real type, maybe a select case around TypeName. . .

Any recommendations are appreciated, also please forgive any code errors above, I retyped the examples from memory as I don't have access to the project at the moment.

0 投票
2 回答
5324 浏览

java - 如何使用hibernate正确映射嵌套子类

如何使用 Hibernate 嵌套子类?

例如,我有以下类层次结构:

这是理想的对象结构。如何使用 Hibernate 成功映射它?我会说PageQuestion抽象类非常重要。它包含许多可重用的属性和逻辑。我还需要PageQuestion专门引用而不引用PageElement<- 这会很糟糕。我还想查询所有PageQuestion对象。