2011-01-12 2 views
4

Ich habe ein Modell mit zwei Viele-zu-viele Beziehungen. Play Framework erstellt die Beziehungstabelle für mich, aber keine der IDs kann Nullwerte enthalten, was dazu führt, dass mein Code nicht funktioniert.Wie bekomme ich viele @ManyToMany Beziehungen zu arbeiten?

Play-Rahmen gibt PersistenceException aufgetreten: insert into Costumer_Item (customersWhoIgnored_id, ignoredItems_id) Werte

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 

Der Code Item.java ist (?,?):

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

} 

Wie bekomme ich viele @ManyToMa ny Beziehungen zu arbeiten?

Antwort

3

Ich denke, beide Beziehungen verwenden die gleiche Join-Tabelle mit Standardname Costumer_Item, die Verwirrung verursacht. Sie müssen verschiedene Namen manuell an:

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

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

ich stark nicht empfehlen die ManyToMany verwenden und stattdessen nur eine Eins-zu-viele nutzen und viele-zu-eins-Beziehungen, mit einem expliziten Domänenobjekt für die Mitte. Es ist sehr leicht, mit ManyToMany (wie Sie finden) zu verwechseln, und Sie müssen oft sowieso zusätzliche Daten zu ManyToMany hinzufügen.

Auch, FWIW, das ist viel mehr von einem JPA/Hibernate-Problem als ein Play-Framework-Problem.