问题标签 [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.
grails - 在 Grails 中,如何获取基类型的所有子类的所有鉴别器值的列表?
假设我有以下课程:
等等等等。我现在需要显示一个下拉列表,其中包含所有扩展子类的所有鉴别器值的列表,Fruit
例如:
这很容易对其中的 4 个进行硬编码,但在我的实际域中,这个列表可能会变得很长。有没有办法获得所有实现基类型的子类的所有鉴别器值的列表?像这样的东西,例如:
grails - 在 Grails 中,如何在单元测试中模拟 GrailsDomainBinder?
我有一堆像这样的子类:
换句话说,Fruit
是一个带有Apple
和Pear
作为子类型的基本类型。我公开了一个type
获取子类中设置的鉴别器值的属性。
现在我有一个JsonExportService
将实例导出为 JSON 数据的方法。当我运行应用程序时,该服务正确导出了type
用鉴别器值填充的属性。
我现在需要为JsonExportService
. 问题是,GrailsDomainBinder
在单元测试中似乎没有被嘲笑,而且我得到 NPE: cannot access discriminator
property on a null object。
我可以通过两种方式解决它:
在每个子类中创建一个与鉴别器具有相同值的静态属性:
不过,这似乎真的很老套,我在两个地方声明了相同的值。
getType()
将代码更改为:这可行,但现在我基本上完全忽略了鉴别器,并且单元测试并不“完整”,因为它需要后续集成测试以确保该
getType()
方法返回正确的值。
有谁知道从域映射中获取鉴别器值的更好的、单元测试友好的方法?
grails - 在 Grails 中,是否可以更改持久实体的子类型?
假设我有以下课程:
假设用户想要创建一个新的Apple
. 他们从下拉列表中选择一种类型,然后我使用一项服务将类型字符串转换为具体类型:
这将成功保存一个新Apple
实例。
现在假设用户意识到他们犯了一个错误并且他们想创建一个Orange
代替。在编辑视图中,我为用户提供了将类型更改为 an 的功能Orange
,但是如何更新现有Apple
实例以使其现在为 an Orange
?由于其他关系,我不能简单地删除Orange
并创建一个新实例。Apple
这甚至可能吗?
inheritance - 查询父类总是返回一个空集合
我有一个带有以下注释的父类
现在我所有的子类都有以下注释,除了注释的value
属性@Discriminator
当然不同,注释的属性也table
不同@PersistanceCapable
。
通过一个用 注释的 DAO 类,@Persistence
我使用以下方法作为 PoC
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:
inheritance - OpenJPA 加入继承 - 避免数据库连接
我正在使用带有 Joined 继承策略的 OpenJPA(InheritanceType.JOINED - 所以超类中的所有字段都有一个表,子类表只包含在子类中添加的任何内容的字段,以及对超类的引用桌子)。假设我有一个超类 Person 和许多子类:TypeAPerson、TypeBPerson 等。当有如下查询时:
据我所知,我不会得到 Person 实例,而是正确的子类实例。如此处所述,为了实现这一点并获得正确的子类,OpenJPA 将进行多个连接(每个子类一个)。这具有相当糟糕的性能,特别是如果我有很多子类。我的问题是,是否有任何方法可以通过提示 JPA 加入哪个表来避免这种情况?我想到的第一件事是使用鉴别器值。OpenJPA 支持使用加入策略的鉴别器,所以它应该能够从鉴别器值中确定一个子类(从而确定一个合适的加入表)?有没有办法做到这一点?有没有其他方法可以避免不必要的数据库连接?
inheritance - JPA 2映射继承类型JOINED还是SINGLE?
我有一个测试用例,它有三个表/类(Language、Caption 和 CaptionLanguage)。
语言表存储语言数据。
Caption 表存储字幕索引数据。
CaptionLanguage 表存储每种语言的字幕数据。
我可以使用哪种继承类型来解决问题?
如果我使用“@Inheritance(strategy=InheritanceType.JOINED)”设置“@DiscriminatorColumn(name="ID_LANG",discriminatorType=DiscriminatorType.Integer) ”,会起作用吗?
不使用 @DiscriminatorValue(value="Value")
谢谢!
hibernate - 休眠加入2行
为了使我的java代码更容易,我想将两行合并为一,因为我真的需要这两行才能使用数据。
假设这些是我表的字段:
显然,ID 是主键。FIELD1 和 2 让我们识别 2 行的“组”,它们仅通过 DISCRIMINATOR 和 VALUE 不同(鉴别器指示值代表什么)
我希望每个“组”有一个 POJO(其中 FIELD1 和 2 将用作复合 ID),例如:
在哪里 :
VALUE1 = 鉴别器 A 的 VALUE
VALUE2 = 鉴别器 B 的 VALUE
在 SQL 中,我会这样请求它:
不幸的是,我不知道如何让它在休眠状态下,我现在对所有的可能性感到困惑。
我宁愿将解决方案作为映射的 XML,但如果别无选择,仍然会采用注释解决方案。
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 语句更新引用,还是应该“手动”加载/更新/保存所有受影响的人员对象?
ef-code-first - 实体框架代码优先:按层次结构表,不填充自定义鉴别器字段
我正在使用 Table Per Hierarchy (TPH) 架构来处理现有的数据库模式。当我尝试使用自定义鉴别器字段名称时 DbEntityValidationException:
属性:CourseType 错误:CourseType 字段是必需的。