Ste*_*rla 7 java mapping inheritance hibernate
我有一个对象,其字段可以是许多对象类型.此对象在单个表中编码,并带有字段子类型的鉴别器列.这些子类型中的每一个都将其字段映射到父对象表中的列.我似乎无法在hibernate中对此进行建模.getSubfield()无论表中的子类型数据是什么,下面的代码都将返回null .
架构
id type whosit whatsit +----+------+--------+---------+ | 1 | "A" | "test" | null | | 2 | "B" | null | "test" | +----+------+--------+---------+
域对象
@Entity
public class Parent {
protected @Id @GeneratedValue int id;
protected Subfield subfield;
public Subfield getSubfield() {return subfield;}
}
@Embeddable
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING)
public abstract class Subfield {}
@DiscriminatorValue("A")
public class TypeA extends Subfield {
public String whosit;
}
@DiscriminatorValue("B")
public class TypeB extends Subfield {
public String whatsit;
}
Run Code Online (Sandbox Code Playgroud)
"SELECT p FROM parent p"
{id=1,subfield=null}
{id=2,subfield=null}
Run Code Online (Sandbox Code Playgroud)
是否可以使用此对象模型完成我想要的任务,或者我是否需要更具创造性(这是遗留数据库,更改模式不是首选)
正如提问者所指出的,hibernate不支持可嵌入类的继承(https://hibernate.atlassian.net/browse/HHH-1910).
根据Eclipse wiki,JPA没有指定这种行为,但EclipseLink确实支持它(http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Embeddable#Inheritance).
我的建议是在Subfield中彻底粉碎课程层次.可怕,但应该工作,直到这个解决.
好吧,您无法轻松更改架构,但是添加几个视图怎么样?
| 归档时间: |
|
| 查看次数: |
8932 次 |
| 最近记录: |