我正在寻找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
这个问题有解决方案吗?
由于
答案 0 :(得分:2)
根据JPA 2.0规范,这是不可能的:
11.1.10 DiscriminatorColumn Annotation
用于
SINGLE_TABLE
映射 战略,通常也是为了JOINED
策略,持久性 提供者将使用类型鉴别器 柱。DiscriminatorColumn
注释用于定义 鉴别器列SINGLE_TABLE
和JOINED
继承映射策略。策略和鉴别器列仅在根目录中指定 实体类层次结构或 其中不同的子层次结构 继承策略应用。