2016-07-22 33 views
0

Kann eine Unterklasse (Entität) eine OneToMany-Zuordnung von ihrer Oberklasse (Entität) überschreiben? Momentan bekomme ich "HibernateException: Gefundene Referenzen auf eine Sammlung gefunden", vermutlich weil die Entitäten der Superklassen und die Unterklassen beide auf dieselbe Liste verweisen.Hibernate: Überschreiben des zugeordneten OneToMany-Felds der Entitätsoberklasse?

(Mein Verständnis ist, dass @AssociationOverride kann nur verwendet werden, wenn die Oberklasse @MappedSuperclass, nicht @Entity. Ich möchte nicht die Oberklasse von @Entity zu @MappedSuperclass ändern, weil ich die Tabelle für die Oberklasse und die Fähigkeit, darauf abzufragen.)

Wie kann ich Hibernate map so etwas wie das folgende haben?

@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() 
    ... 
} 

Antwort

0

Am Ende markierte ich die Getter Unterklassen (CatOwner.getPets() und Cat.getOwner()) mit @Override @Transient.