【发布时间】:2016-07-22 18:24:23
【问题描述】:
是否可以让子类(实体)覆盖其超类(实体)的 OneToMany 映射?目前我收到“HibernateException:找到对集合的共享引用”,大概是因为超类实体和子类实体都链接到同一个列表。
(我的理解是@AssociationOverride 只能在超类为@MappedSuperclass 时使用,而不是@Entity。我不想将超类从@Entity 更改为@MappedSuperclass,因为我想要超类的表和能够对其进行查询。)
我怎样才能让 Hibernate 映射如下?
@Entity
public abstract class PetOwner {
@OneToMany(targetEntity = Pet.class, mappedBy = "owner")
public <T extends Pet> List<T> getPets()
...
}
@Entity
public abstract class Pet {
@ManyToOne(targetEntity = PetOwner.class)
@JoinColumn(name = "owner_id", referencedColumnName = "id")
public <T extends PetOwner> T getOwner()
...
}
@Entity
public class CatOwner extends PetOwner {
@Override
@OneToMany(targetEntity = Cat.class, mappedBy = "owner")
public List<Cat> getPets()
...
}
@Entity
public class Cat extends Pet {
@Override
@ManyToOne(targetEntity = CatOwner.class)
@JoinColumn(name = "owner_id", referencedColumnName = "id")
public CatOwner getOwner()
...
}
【问题讨论】:
标签: hibernate jpa inheritance many-to-one hibernate-onetomany