问题标签 [discriminator]

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

grails - 在 Grails 中,如何获取基类型的所有子类的所有鉴别器值的列表?

假设我有以下课程:

等等等等。我现在需要显示一个下拉列表,其中包含所有扩展子类的所有鉴别器值的列表,Fruit例如:

这很容易对其中的 4 个进行硬编码,但在我的实际域中,这个列表可能会变得很长。有没有办法获得所有实现基类型的子类的所有鉴别器值的列表?像这样的东西,例如:

0 投票
1 回答
288 浏览

grails - 在 Grails 中,如何在单元测试中模拟 GrailsDomainBinder?

我有一堆像这样的子类:

换句话说,Fruit是一个带有ApplePear作为子类型的基本类型。我公开了一个type获取子类中设置的鉴别器值的属性。

现在我有一个JsonExportService将实例导出为 JSON 数据的方法。当我运行应用程序时,该服务正确导出了type用鉴别器值填充的属性。

我现在需要为JsonExportService. 问题是,GrailsDomainBinder在单元测试中似乎没有被嘲笑,而且我得到 NPE: cannot access discriminatorproperty on a null object。

我可以通过两种方式解决它:

  1. 在每个子类中创建一个与鉴别器具有相同值的静态属性:

    不过,这似乎真的很老套,我在两个地方声明了相同的值。

  2. getType()将代码更改为:

    这可行,但现在我基本上完全忽略了鉴别器,并且单元测试并不“完整”,因为它需要后续集成测试以确保该getType()方法返回正确的值。

有谁知道从域映射中获取鉴别器值的更好的、单元测试友好的方法?

0 投票
0 回答
143 浏览

grails - 在 Grails 中,是否可以更改持久实体的子类型?

假设我有以下课程:

假设用户想要创建一个新的Apple. 他们从下拉列表中选择一种类型,然后我使用一项服务将类型字符串转换为具体类型:

这将成功保存一个新Apple实例。

现在假设用户意识到他们犯了一个错误并且他们想创建一个Orange代替。在编辑视图中,我为用户提供了将类型更改为 an 的功能Orange,但是如何更新现有Apple实例以使其现在为 an Orange?由于其他关系,我不能简单地删除Orange并创建一个新实例。Apple这甚至可能吗?

0 投票
1 回答
122 浏览

inheritance - 查询父类总是返回一个空集合

我有一个带有以下注释的父类

现在我所有的子类都有以​​下注释,除了注释的value属性@Discriminator当然不同,注释的属性也table不同@PersistanceCapable

通过一个用 注释的 DAO 类,@Persistence我使用以下方法作为 PoC

0 投票
1 回答
656 浏览

entity-framework - Entityframework 4.3 codefirst using TPT and discriminator

I have these three models:

I want to show a list of Equipments with 2 columns title and type.

for example:

I don't know how to make a discriminator column in Equipments to show the type of each equipments.

EDITED

If I have a discriminator in Equipment entity like:

I can get the query in controller or repository like this:

0 投票
1 回答
616 浏览

inheritance - OpenJPA 加入继承 - 避免数据库连接

我正在使用带有 Joined 继承策略的 OpenJPA(InheritanceType.JOINED - 所以超类中的所有字段都有一个表,子类表只包含在子类中添加的任何内容的字段,以及对超类的引用桌子)。假设我有一个超类 Person 和许多子类:TypeAPerson、TypeBPerson 等。当有如下查询时:

据我所知,我不会得到 Person 实例,而是正确的子类实​​例。如此处所述,为了实现这一点并获得正确的子类,OpenJPA 将进行多个连接(每个子类一个)。这具有相当糟糕的性能,特别是如果我有很多子类。我的问题是,是否有任何方法可以通过提示 JPA 加入哪个表来避免这种情况?我想到的第一件事是使用鉴别器值。OpenJPA 支持使用加入策略的鉴别器,所以它应该能够从鉴别器值中确定一个子类(从而确定一个合适的加入表)?有没有办法做到这一点?有没有其他方法可以避免不必要的数据库连接?

0 投票
1 回答
269 浏览

inheritance - JPA 2映射继承类型JOINED还是SINGLE?

我有一个测试用例,它有三个表/类(Language、Caption 和 CaptionLanguage)。

语言表存储语言数据。
Caption 表存储字幕索引数据。
CaptionLanguage 表存储每种语言的字幕数据。

MER

我可以使用哪种继承类型来解决问题?


如果我使用“@Inheritance(strategy=InheritanceType.JOINED)”设置“@DiscriminatorColumn(name="ID_LANG",discriminatorType=DiscriminatorType.Integer) ”,会起作用吗?
不使用 @DiscriminatorValue(value="Value")

谢谢!

0 投票
1 回答
849 浏览

hibernate - 休眠加入2行

为了使我的java代码更容易,我想将两行合并为一,因为我真的需要这两行才能使用数据。

假设这些是我表的字段:

显然,ID 是主键。FIELD1 和 2 让我们识别 2 行的“组”,它们仅通过 DISCRIMINATOR 和 VALUE 不同(鉴别器指示值代表什么)

我希望每个“组”有一个 POJO(其中 FIELD1 和 2 将用作复合 ID),例如:

在哪里 :

VALUE1 = 鉴别器 A 的 VALUE

VALUE2 = 鉴别器 B 的 VALUE

在 SQL 中,我会这样请求它:

不幸的是,我不知道如何让它在休眠状态下,我现在对所有的可能性感到困惑。

我宁愿将解决方案作为映射的 XML,但如果别无选择,仍然会采用注释解决方案。

0 投票
1 回答
926 浏览

hibernate - 从一个子类更改为另一个子类的最聪明方法(更新鉴别器值)

背景:我正在为以下类实现持久性:

  • class Person

  • abstract class ContactInfo

    • Email extends ContactInfo
    • SnailMail extends ContactInfo

每个Person都有一个对ContactInfo对象的引用。(并且一个ContactInfo对象可以在多个Person之间共享。)

在我的用户界面中,我需要让用户编辑联系信息对象,并可能将电子邮件地址替换为蜗牛邮件地址。(如果要替换的联系信息对象在几个人之间共享,则所有这些人都应该更新他们的联系信息。)

然而,据我了解,Hibernate 拒绝更新鉴别器列,因此只需创建一个新的SnailMail对象,为其提供要替换的电子邮件对象的主键值,然后保存它是行不通的。

问题:允许用户将ContactInfo对象从Email更改为SnailMail的最佳方法是什么?

(这些对象是“短暂的”。它是 Web 应用程序的一部分,所有对象都会在每次请求时通过 HQL 重新读取,因此无需担心任何分离的对象。)

到目前为止我的想法:我意识到我可以删除旧对象,插入新对象。如果这是首选方法,我应该 (A) 尝试重用旧的主键值(在这种情况下我需要使用分配的生成器)还是 (B) 让后端为新对象生成新的 ID,并且更新人员联系人引用以指向新对象?

如果 (B) 是要走的路,我可以使用一些 HQL 语句更新引用,还是应该“手动”加载/更新/保存所有受影响的人员对象?

0 投票
1 回答
1376 浏览

ef-code-first - 实体框架代码优先:按层次结构表,不填充自定义鉴别器字段

我正在使用 Table Per Hierarchy (TPH) 架构来处理现有的数据库模式。当我尝试使用自定义鉴别器字段名称时 DbEntityValidationException

属性:CourseType 错误:CourseType 字段是必需的。

楷模

实体类型配置

数据上下文

执行的代码