有谁知道如何使用由 Hibernate 4.0.0.Final 支持的 JPA 2.0 注释将同一层次结构中的每个子类的集合映射到一个拥有的类上?
有点复杂,所以这里有一个例子。层次结构类如下所示:
@Entity
@Cacheable(true)
@Table(name = "hierarcicals")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "class", discriminatorType = DiscriminatorType.STRING)
public abstract class MySuperClass {
...
@Entity
@DiscriminatorValue("SubClassOne")
public class SubClassOne extends MySuperClass {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "owner")
private Owner owner;
@Entity
@DiscriminatorValue("SubClassTwo")
public class SubClassTwo extends MySuperClass {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "owner")
private Owner owner;
这一切看起来都很好,当我持久化对象时,我可以看到它们以正确的鉴别器和正确的所有者进入数据库。
这是我的“拥有”类——它的注释没什么特别的:
@Entity
@Cacheable(true)
@Table(name = "owner")
public class Owner {
...
@OneToMany(mappedBy = "owner", fetch = FetchType.LAZY)
private List<SubClassOne> subClassOnes;
@OneToMany(mappedBy = "owner", fetch = FetchType.LAZY)
private List<SubClassTwo> subClassTwos;
...
2 List 集合具有吸气剂。当我调用 getSubClassOnes() 时,我得到一袋所有关联实体,作为 SubClassOne 类型,即使是那些在数据库中具有 SubClassTwo 鉴别器的实体。当我调用 getSubClassTwos() 时,我得到似乎是一袋 SubClassTwos,但是当我在运行时迭代集合时,它会爆炸
初始化(AbstractPersistentCollection.java:379)[hibernate-c at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:112)[hibernate-core-4。在 org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266) [hibernate-core-4.0.0.Final.jar:4.0.0.Final]
我想要发生的是 getSubClassOnes() 返回一个集合,其中包含与具有类 SubClassOnes 的所有者相关联的集合,而 getSubClassTwos() 返回一个具有相关 SubClassTwos 的集合。有谁知道我怎么能做到这一点?