我在EclipseLink中寻找一种在同一实体上具有两个@DiscriminatorColumns的方法

我的PostreSQL DB表是:

Dictionary
{
  id,
  object_type,
  attribute_type,
  translation
}

和类是:
@Entity
@Table(name = "dictionary")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="object_type",
                     discriminatorType=DiscriminatorType.INTEGER)
public class DictionaryRow implements Serializable;

@Entity
@DiscriminatorValue("0")
@DiscriminatorColumn(name="info_type",
                     discriminatorType=DiscriminatorType.INTEGER)
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class DictionaryAttribute extends DictionaryRow;

@Entity
@DiscriminatorValue("1")
public class DictionaryAttributeName extends DictionaryAttribute;

我想要实现的是,当我调用DictionaryAttributeName时,它将被解析为SQL,例如:
select * from DICTIONARY where info_type = 1 and object_type = 0

但是实际上,它从DictionaryRow类中获取了DiscriminatorColumn,从DictionaryAttributeName中获取了DiscriminatorValue,从而导致了完全错误的SQL:
select * from DICTIONARY where object_type = 1

有解决此问题的方法吗?

谢谢

最佳答案

根据JPA 2.0规范,这是不可能的:

11.1.10 DiscriminatorColumn注释

对于SINGLE_TABLE映射
策略,通常也适用于
JOINED策略,持久性
提供者将使用类型区分符
柱。 DiscriminatorColumn 批注用于定义
的鉴别符列
SINGLE_TABLEJOINED 继承映射策略。

仅在根目录中指定了strategy和discriminator列
实体类层次结构

子层次结构,其中不同
继承策略被应用。

参考文献

  • JPA 2.0规范
  • 第11.1.10节“DiscriminatorColumn注释”
  • 10-04 20:16