问题标签 [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 投票
2 回答
615 浏览

hibernate - Hibernate JPA 级联删除与 DiscriminatorColumn

我正在使用 Hibernate 的 JPA 实现。我有一个包含不同类型用户(私人|公共等)的用户表,user_type 列指定用户的类型。

我有一个用户类,它是一个代表用户表的实体。我添加了

在我的用户类上创建了 2 个类,PrivateUser 和 PublicUser,每个类都使用相应的 @DiscriminatorValue 扩展用户类。

我还有 PrivateCompany 和 PublicCompany 表,它们分别使用用户表中名为 company_id 的列具有一对多关系 PrivateUser 实体和 PublicUser 实体。我在两个 OneToMany 关系上也有级联删除。

现在,如果我有一个 ID 为 10 的 PrivateCompany 和一个 ID 为 10 的 PublicCompany ,并且 PrivateCompany 和 PublicCompany 的用户表中的用户条目如下所示。

如果我删除 PrivateCompany,我最终会删除用户 101 和 100,因为 company_id 上的 OneToMany 关系并且它不考虑 user_type 列,尽管它被提及为 DiscriminatorColumn。我正在寻找一种方法来提供级联删除功能,该功能在删除子项时考虑 DiscriminatorColumn。我尝试创建具有多个列的 JoinColumns,但我可以创建与列名而不是列值的关系(这是我的情况)。

如果我的解释不清楚,请告诉我。

提前致谢

0 投票
2 回答
351 浏览

nhibernate - NHibernate Table Per Subclass 导致无意义的 INSERT 语句 - 我做错了什么?

我有以下实体:

我使用以下 Hibernate Conformist 映射映射这些实体:

EnumCustomType是将IUserTypeC# 枚举映射到整数列的一个。

经过大量研究和咨询 NHibernate 参考文档和此博客(特定页面)(摘要)后,我制定了此设计和映射。我确信这是我想要的实体设计,但当然有可能(可能?)我弄错了映射。

当我启动并配置 NHibernate 时,它​​会加载映射并且不会抱怨。日志输出没有关于映射的警告。但是,当我创建 a 时PersonUser,将值分配给它的所有属性,并将Add其分配给ISession,最奇怪的事情发生了:

重要的是,看看生成的 SQL:

这是没有意义的。它根本不对应于映射。它在一个表的插入语句中从三个不同的表中获取列。它有来自PersonUserAND 的列ClientUser(这应该是不可能的),它使用不存在的参数索引绑定参数,甚至不包括我设置的所有属性!

我已经玩了几个小时了,没有任何进展。我在这里完全不知所措。这没有任何意义。有人见过这个吗?知道发生了什么吗?

编辑我忘了提:我在这里使用鉴别器是因为我希望能够User通过它的 ID 获得一个泛型,它返回正确的PersonUserClientUser取决于它是哪种类型。

0 投票
1 回答
3305 浏览

hibernate - 基于鉴别器的多租户与 Spring Data JPA+Hibernate

我想为基于共享模式的多租户模型实施基于 DISCRIMINATOR 的多租户解决方案-所有租户的通用数据库架构。

技术栈

  • Hibernate 3 全局过滤器(我不能使用 EclipseLink)
  • Spring Data JPA - 我想要这个,因为我们已经在使用这个并且我们无法更改它。

我的问题是

  • 如何实现这一点:Spring Data JPA 对 GLOBAL 过滤器没有任何支持,所以我需要添加自定义 Spring Data JPA 存储库,它可以反过来为基于 DISCRIMINATOR 的解决方案应用全局过滤器?
  • 完全可以用 Spring Data JPA+Hibernate 3 来实现我的要求吗?
0 投票
0 回答
552 浏览

java - 涉及引用表而非主类表的判别器公式

我有休眠 XML,我想根据鉴别器公式的结果检索一行作为子类的实例。麻烦的是,要检查的字段在引用的表上,而不是在表本身上。我的对象是商家-用户账户,是用户账户和商家的组合。user_account 表有一个角色字段,其中可能包含多个值,其中一些表示管理员权限级别。我想做这样的事情,但这本身(试图userAccount.role在 case 语句中引用)不起作用:

这甚至可能吗?

0 投票
1 回答
9582 浏览

java - EclipseLink JPA 继承无鉴别器列

我有一个 Client 和 Affiliate 类,继承自 Person 类。正在使用联合继承策略类型 - 它们每个都与父类共享主键。由于没有鉴别器列,我们选择使用DescriptorCustomizer 和 ClassExtractor。但它并没有真正说明它是如何工作的,而且代码似乎没有编译。如果有人给出一个带有代码片段的好例子来理解,那就太好了。

0 投票
1 回答
2180 浏览

symfony - 类表继承,repository->findByTypeId

我对 Symfony 和 Doctrine 还很陌生,我在尝试设置类表继承时遇到了问题。我有一个名为“TeamActionTarget”的父实体,以及两个名为“Player”和“Competition”的子实体。我的父实体的模型如下:

Doctrine2 为我生成了一个父表,其中包含 2 个字段“id”和“type_id”,以及 2 个子表,它们具有自己的独特字段。我现在要做的是从表单发布的整数值中按类型检索所有子项。

所以在控制器中,我编写了这个:

但是 Symfony2 向我返回一个错误: 实体“Van\TeamsBundle\Entity\TeamActionTarget”没有字段“typeId” 这是真的。实体模型不包含该字段,只有父类包含。所以我尝试在实体模型中添加这个字段,但是在尝试更新实体时出现错误,说这个字段和鉴别器之间存在冲突。

我的问题很简单,如何按类型检索我的孩子,从表单发布?

0 投票
0 回答
446 浏览

node.js - Node.js,带有嵌入对象(继承、鉴别器)的猫鼬策略模式

有人可以帮我吗?我想将策略模式或继承/鉴别器与猫鼬及其嵌入对象一起使用。我知道猫鼬在集合上支持继承/鉴别器,但还没有找到任何嵌入式对象的解决方案。不知道如何定义模式,或者即使没有真正繁重的编码也是可能的。

这是我的代码。

源集合,其中每个源都可以有一个不同类型的传输。理想的情况是调用 Source.getTransport() 返回 HttpTransport 或 FileTransport 的实例。

我什至不确定 mongoose 文档(如 HttpTransport / FileTransport)是否应该包含方法 read() 并完成所有繁重的工作,或者只是将其保留为配置对象并使用外部工厂来创建传递此配置对象的传输实例.

或者我完全错了,还有其他我可以使用的模式?

感谢您的任何帮助。

0 投票
2 回答
700 浏览

nhibernate - 添加对鉴别器(类类型)的限制以在流畅的 nhibernate 中选择类的子集

我正在将流利的 nhibernate 与 Discriminator 一起用于子类。(非常类似于这个问题

例如,假设我有扩展抽象类 Animal 的类 Cat、Dog 和 Racoon。

我希望能够同时选择 Cat 和 Dog 但忽略 Racoon。所以

对我不起作用,因为获取猫和狗的列表并合并它们似乎是一种错误的做法。

我试过做

它是变体,但总是会导致错误。

请问有没有办法可以在查询对象中指定我想要的子类?


进一步挖掘,我发现你可以在 HQL中做到这一点

但我仍然无法将其转换为 ICriteria / Query 对象。

0 投票
1 回答
311 浏览

doctrine - 与 Doctrine 连接表中的鉴别器

我有许多不相关的实体,我希望能够将 FileAttachment 实体添加到其中。我正在使用 Doctrine2(在 Symfony 项目的上下文中)。

在我开始使用 Doctrine 之前,我会制作一个带有鉴别器列的连接表,如下所示:

据我所知,对于 Doctrine,我需要为每个具有 FileAttachment 关联的实体类型提供一个联结表。如果可能的话,我宁愿避免这种情况。我在这里找到了 NHibernate 解决方案。是否有可能用 Doctrine 做类似的事情,有人可以指点我一些文档吗?我已经阅读(现在很多次了!)Doctrine 手册的第6章和第7章。但我没有找到我要找的东西。

0 投票
1 回答
1937 浏览

sql - 在实体框架中保存实体时未设置“鉴别器”列

我有一个基类人:

并有嵌套类Doctor:

表人脚本

当我尝试保存新的 Doctor 实体时出现错误:

无法将值 NULL 插入“鉴别器”列

在这种情况下我做错了什么?为什么 EF 不在鉴别器字段中保存“医生”值?

更新:

来自 DBContext 的一部分: