2010-10-28 1 views
5

Ich bin für mein Hibernate-Projekt das folgende Design mit:@ManyToMany in einem abstrakten MappedSuperclass

@MappedSuperclass 
public abstract class User { 
    private List<Profil> profile; 

    @ManyToMany (targetEntity=Profil.class) 
    public List<Profil> getProfile(){ 
     return profile; 
    } 
    public void setProfile(List<Profil> profile) { 
     this.profile = profile; 
    } 
} 

@Entity 
@Table(name="kunde") 
public class Kunde extends User { 
    private Date birthdate; 
    @Column(name="birthdate") 
    @Temporal(TemporalType.TIMESTAMP) 
    public Date getBirthdate() { 
     return birthdate; 
    } 
    public void setBirthdate(Date birthdate) { 
     this.birthdate= birthdate; 
    } 
} 

@Entity 
@Table(name="employee") 
public class Employee extends User { 
    private Date startdate; 
    @Column(name="startdate") 
    @Temporal(TemporalType.TIMESTAMP) 
    public Date getStartdate() { 
     return startdate; 
    } 
    public void setStartdate(Date startdate) { 
     this.startdate= startdate; 
    } 
} 

Wie Sie sehen können, haben Benutzer eine ManyToMany Beziehung zu profilieren.

@Entity 
@Table(name="profil") 
public class Profil extends GObject { 
    private List<User> user; 

    @ManyToMany(mappedBy = "profile", targetEntity = User.class) 
    public List<User> getUser(){ 
     return user; 
    } 
    public void setUser(List<User> user){ 
     this.user = user; 
    } 
} 

Wenn ich jetzt versuchen, einen Mitarbeiter zu erstellen, erhalte ich eine Hibernate Ausnahme:

org.hibernate.AnnotationException: Verwenden Sie von @OneToMany oder @ManyToMany Targeting eine nicht zugeordnete Klasse: de .ke.objects.bo.profile.Profil.user [de.ke.objects.bo.user.User]

Wie kann ich eine ManyToMany-Beziehung auf den übergeordneten Klasse User Profil, so dass es funktioniert für Kunde und Empl Oyee?

Vielen Dank im Voraus.

+0

hallo, haben Sie in der Lage gewesen, dieses Problem zu lösen? Ich stehe vor demselben Problem. – tarkikshah

Antwort

3

Das Problem ist mit dem Verweis auf Benutzer, der keine Entität ist. Ein Fremdschlüssel kann nur auf eine Tabelle verweisen. Verwenden Sie entweder @ManyToAny, das mehrere Tabellen verarbeiten kann, oder @Inheritance (strategie = InheritanceType.SINGLE_TABLE), wodurch alle Entitäten auf eine Tabelle gesetzt werden.

Hier ist die Dokumentation über Vererbung in Hibernate: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e1168