【问题标题】:Hibernate: overriding the (entity) superclass's OneToMany mapped field?休眠:覆盖(实体)超类的 OneToMany 映射字段?
【发布时间】: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


    【解决方案1】:

    最后我用@Override @Transient 标记了子类的getter(CatOwner.getPets() 和Cat.getOwner())。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多