2010-10-28 8 views
5

Je vais avoir la conception suivante pour mon projet de mise en veille prolongée:@ManyToMany dans un résumé 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; 
    } 
} 

Comme vous pouvez le voir, chapeau utilisateur une relation ManyToMany au profil.

@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; 
    } 
} 

Si je vais maintenant essayer de créer un employé, je reçois une exception veille prolongée:

org.hibernate.AnnotationException: Utilisez de @OneToMany ou @ManyToMany ciblant une classe unmapped: de .ke.objects.bo.profile.Profil.user [de.ke.objects.bo.user.User]

Comment puis-je utiliser un ManyToMany-Lien avec le profil de l'utilisateur superclasse, il fonctionne pour Kunde et Empl oyee?

Merci d'avance.

+0

salut, vous avez été en mesure de résoudre ce problème? Je suis confronté au même problème. – tarkikshah

Répondre

3

Le problème est avec la référence à l'utilisateur, qui n'est pas une entité. Une clé étrangère peut uniquement référencer une table. Utilisez @ManyToAny, qui peut gérer plusieurs tables, ou @Inheritance (strategy = InheritanceType.SINGLE_TABLE), qui placera toutes les entités sur une table.

Voici la documentation sur l'héritage en veille prolongée: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e1168