我在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_TABLE
和JOINED
继承映射策略。
仅在根目录中指定了strategy和discriminator列
实体类层次结构或
子层次结构,其中不同
继承策略被应用。
参考文献