2016-06-30 35 views
0

オブジェクト間にmany-to-manyの関係を確立したいと考えています。 私はBookクラスを持っている:MappingException:外部キーは、参照された主キーと同じ列数を持つ必要があります

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private Long book_id; 

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
@JoinTable(name = "UserHibernate", joinColumns = { 
     @JoinColumn(name = "user_id", nullable = false, updatable = false) }, 
     inverseJoinColumns = { @JoinColumn(name = "book_id", 
       nullable = false, updatable = false) }) 
private Set<User> user; 

そして、私が持っているUserクラス:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long id; 
@ManyToMany(fetch=FetchType.EAGER, cascade = CascadeType.ALL, mappedBy="user") 
private List<Book> books; 

私は他のテーブルを持っていません。私は<property name="hibernate.hbm2ddl.auto" value = "create" />を持っていますので、私は休止状態が私のためにテーブルを作成することを期待しています。

私は例外を以下の取得:

Caused by: org.hibernate.MappingException: Foreign key (FK_6ipoxvx8h128sx13eysun7r00:UserHibernate [book_id])) must have same number of columns as the referenced primary key (UserHibernate [user_id,book_id]) 

誰が間違っているかを調べるために私を助けてもらえますか?

答えて

0

お会いできて良かったです。私は、聞く、あなたは休止状態で新しい子供です参照してください。あなたは、多対多の関係のために@JoinTable中間テーブルに指定する必要があり、例えばUser_BookHibernate

@JoinTable(name = "User_BookHibernate", joinColumns = { 
     @JoinColumn(name = "user_id", nullable = false, updatable = false) }, 
     inverseJoinColumns = { @JoinColumn(name = "book_id", 
       nullable = false, updatable = false) }) 

Hibernateはあなたのための3つのテーブルを作成します。 User_BookHibernateuser_idbook_idに一致します。

関連する問題