2017-05-25 32 views
1

我有兩個有兩個關係的類。當兩個實體之間存在多重關係時拋出異常

用戶類:

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

    //....... 
} 

類:

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

當我想啓動應用程序,我得到這個異常:

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

我看到其他類似的帖子,埠顯然他們沒有使用javax.persistence.Entity,這是造成這個錯誤的根本原因。任何想法如何解決這個問題?

+0

您正在使用哪個數據庫? –

回答

1

是保留關鍵字。使用反引號來轉義保留的關鍵字。退房this的答案。

@Table(name = "`Group`") 

而且你@ManyToMany映射不幸正確。 更新您的Group實體,如下所示:

@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

還有一個原因是我使用'com.querydsl.core.group.Group'而不是我自己的'Group'。 –

相關問題