EclipseLink / JPA:实体的多个@DiscriminatorColumn注释

时间:2010-10-14 14:21:22

标签: java orm jpa eclipselink

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

我的PostreSQL数据库表是:

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

这个问题有解决方案吗?

由于

1 个答案:

答案 0 :(得分:2)

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

  

11.1.10 DiscriminatorColumn Annotation

     

用于SINGLE_TABLE映射   战略,通常也是为了   JOINED策略,持久性   提供者将使用类型鉴别器   柱。 DiscriminatorColumn   注释用于定义   鉴别器列   SINGLE_TABLEJOINED   继承映射策略。

     

策略和鉴别器列仅在根目录中指定   实体类层次结构或   其中不同的子层次结构   继承策略应用。

参考

  • JPA 2.0规范
    • 第11.1.10节“DiscriminatorColumn Annotation”