2017-05-25 2 views
1

2つのクラスの間に2つのリレーションがあります。2つのエンティティ間に複数のリレーションを持つと例外がスローされます

ユーザークラス:

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

    //....... 
} 

グループクラス:私が見た

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

:私はアプリを起動したい場合は

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

、私はこの例外を取得他の類似の投稿、bu明らかに彼らはjavax.persistence.Entityを使用せず、このエラーの根本原因でした。どのようにこの問題を解決するためのアイデア?

+0

:そうのようなあなたのGroupエンティティを更新 ? –

答えて

1

グループは予約済みです。予約語をエスケープするには、バックティックを使用します。答えはthisです。

@Table(name = "`Group`") 

また、あなたの@ManyToManyマッピングは、残念ながらない正しいです。あなたが使用しているデータベース

@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

もう一つの理由は、自分の 'Group'の代わりに' com.querydsl.core.group.Group'を使用していたことです。 –

関連する問題