2017-05-25 2 views
1

Ich habe zwei Klassen, die 2 Beziehungen zwischen ihnen haben.Ausnahme ausgelöst, wenn mehrere Beziehungen zwischen zwei Entitäten

Benutzer Klasse:

@Entity 
@Table(name="User") 
public class User implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="Id") 
    private long id; 

    @OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="admin") 
    private Set<Group> ownedGroup; 

    @ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="members") 
    private Set<Group> memberGroups; 

    //....... 
} 

Gruppe Klasse:

@Entity 
@Table(name="Group") 
public class Group implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="Id") 
    private long id; 

    @NotNull 
    @ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
    @JoinColumn(name="Admin", referencedColumnName="Id") 
    private User admin; 

    @ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
    @JoinTable(name = "Group_User", 
     joinColumns = @JoinColumn(name = "Group"), 
     inverseJoinColumns = @JoinColumn(name = "User")) 
    private Set<User> members; 
    //.... 
} 

Wenn ich die App gestartet werden soll, bekomme ich diese Ausnahme:

org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.myproject.model.User.memberGroups[com.querydsl.core.group.Group] 

ich sah, andere ähnliche Beiträge, bu t anscheinend verwendeten sie nicht javax.persistence.Entity und es war die Ursache dieses Fehlers. Irgendeine Idee, wie man dieses Problem löst?

+0

Welche Datenbank Sie verwenden? –

Antwort

1

Gruppe ist ein reserviertes Schlüsselwort. Verwenden Sie den Backtick, um ein reserviertes Keyword zu umgehen. Check out this Antwort.

@Table(name = "`Group`") 

Auch Ihre @ManyToMany Mapping ist leider nicht korrekt. Aktualisieren Sie Ihre Group Einheit wie folgt:

@Entity 
@Table(name="`Group`") // Change your table name 
public class Group implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="Id") 
    private long id; 

    @NotNull 
    @ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
    @JoinColumn(name="Admin", referencedColumnName="Id") 
    private User admin; 

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinTable(
     name = "Group_User", 
     joinColumns = @JoinColumn(name = "group_id", referencedColumnName = "id"), //Give a column name 'group_id' and map it to Group primary key id 
     inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id") //Give a column name 'user_id' and map it to User primary key id. 
    ) 
    private Set<User> members; 

    ... 

} 
+0

ein weiterer Grund war, dass ich 'com.querydsl.core.group.Group' anstelle meiner eigenen' Group' verwendete. –

Verwandte Themen