2011-01-12 10 views
4

私は2つの多対多の関係を持つモデルを持っています。 Playフレームワークは私のために関係テーブルを作成しますが、いずれのIDもnullableではないため、私のコードを動作させることができません。多くの@ManyToMany関係が働くにはどうすればよいですか?

再生フレームワーク PersistenceExceptionが発生し返す:(?)Costumer_Item(customersWhoIgnored_id、ignoredItems_id)値を挿入

19:20:54,530 ERROR ~ Field 'customersWhoBought_id' doesn't have a default value 
19:20:54,531 ERROR ~ Could not synchronize database state with session 
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update 

コードをItem.javaある:

@Entity 
public class Item extends Model { 
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "ownedItems") 
    public List<Costumer> customersWhoBought; 

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "ignoredItems") 
    public List<Costumer> customersWhoIgnored; 
} 

Customer.java。

@Entity 
public class Customer extends Model { 
    @Column(nullable = true) 
    @ManyToMany(cascade = CascadeType.ALL) 
    public List<Item> ownedItems; 

    @Column(nullable = true) 
    @ManyToMany(cascade = CascadeType.ALL) 
    public List<Item> ignoredItems; 

} 

多くの@ManyToMa仕事の関係は?

答えて

3

私は両方の関係がデフォルト名Costumer_Itemで同じ結合テーブルを使用していると思います。混乱の原因になります。手動で別の名前を指定する必要があります。私は強く多対多を使用しないことをお勧めします、とだけではなく、中央の明示的なドメインオブジェクトで、1対多や多対1の関係を使用することになり

@ManyToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "CostumerToOwnedItems") 
public List<Item> ownedItems; 

@ManyToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "CostumerToIgnoredItems") 
public List<Item> ignoredItems; 
3

。 ManyToMany(探しているもの)と混同するのは非常に簡単ですし、とにかくManyToManyに追加データを追加する必要があります。

また、FWIWは、Playフレームワークの問題よりも多くのJPA/Hibernateの問題です。

関連する問題