2015-04-25 310 views
0

我使用SpringBoot,與Spring JPA休眠,我試圖使用ManyToMany註釋但它不工作。Spring JPA休眠ManyToMany

連接表已創建,但從未填充。

@Entity 
@Table(name = "commande") 
public class Commande { 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Integer commandeID; 
private String etat; 
private String date_de_validation; 
@ManyToOne(cascade = CascadeType.ALL) 
private Client clientID; 
@ManyToOne(cascade = CascadeType.ALL) 
private Livreur livreurID; 
@ManyToOne(cascade = CascadeType.ALL) 
private Livraison livraisonID; 
@ManyToMany 
@JoinTable(name = "Join_Produit_To_Commande", joinColumns = { @JoinColumn(name = "commandeID") }, inverseJoinColumns = { @JoinColumn(name = "produitID") }) 
private Set<Produit> produits = new HashSet<Produit>();; 

public Commande() { 
} 

public Commande(String etat, String date_de_validation, Client clientID, 
     Livreur livreurID, Livraison livraisonID) { 
    setEtat(etat); 
    setDate_de_validation(date_de_validation); 
    setClient(clientID); 
    setLivreur(livreurID); 
    setLivraison(livraisonID); 
} 

public Integer getCommandeID() { 
    return this.commandeID; 
} 

public void setCommandeID(Integer commandeID) { 
    this.commandeID = commandeID; 
} 

public String getEtat() { 
    return this.etat; 
} 

public void setEtat(String etat) { 
    this.etat = etat; 
} 

public String getDate_de_validation() { 
    return this.date_de_validation; 
} 

public void setDate_de_validation(String date_de_validation) { 
    this.date_de_validation = date_de_validation; 
} 

public Client getClient() { 
    return this.clientID; 
} 

public void setClient(Client clientID) { 
    this.clientID = clientID; 
} 

public Livreur getLivreur() { 
    return this.livreurID; 
} 

public void setLivreur(Livreur livreurID) { 
    this.livreurID = livreurID; 
} 

public Livraison getLivraison() { 
    return this.livraisonID; 
} 

public void setLivraison(Livraison livraisonID) { 
    this.livraisonID = livraisonID; 
} 

public Client getClientID() { 
    return clientID; 
} 

public void setClientID(Client clientID) { 
    this.clientID = clientID; 
} 

public Livreur getLivreurID() { 
    return livreurID; 
} 

public void setLivreurID(Livreur livreurID) { 
    this.livreurID = livreurID; 
} 

public Livraison getLivraisonID() { 
    return livraisonID; 
} 

public void setLivraisonID(Livraison livraisonID) { 
    this.livraisonID = livraisonID; 
} 

public Collection<Produit> getProduits() { 
    return produits; 
} 

public void setProduits(Set<Produit> produits) { 
    this.produits = produits; 
} 

public String toString() { 
    return "commandeID=" + commandeID + " etat=" + etat 
      + " date_de_validation=" + date_de_validation + " clientID=" 
      + clientID + " livreurID=" + livreurID + " livraisonID=" 
      + livraisonID; 
} 

} 

這是我第二類

@Entity 
@Table(name = "produit") 
public class Produit { 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Integer produitID; 
private String libelle; 
private double poid; 
private String type; 
@ManyToMany(mappedBy = "produits") 
private Set<Commande> commandes = new HashSet<Commande>();; 

public Produit() { 
} 

public Produit(String libelle, double poid, String type) { 
    setLibelle(libelle); 
    setPoid(poid); 
    setType(type); 
} 

public String getLibelle() { 
    return this.libelle; 
} 

public void setLibelle(String Libelle) { 
    this.libelle = Libelle; 
} 

public double getPoid() { 
    return this.poid; 
} 

public void setPoid(double poid) { 
    this.poid = poid; 
} 

public String getType() { 
    return this.type; 
} 

public void setType(String type) { 
    this.type = type; 
} 

public Set<Commande> getCommandes() { 
    return commandes; 
} 

public void setCommandes(Set<Commande> commandes) { 
    this.commandes = commandes; 
} 

public String toString() { 
    return "Libelle=" + libelle + " poid=" + poid + " type=" + type 
      + " produitID=" + produitID + " Commandes : " + commandes; 
} 

} 

在這裏,我的單元測試

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = PfeApplication.class) 
@WebAppConfiguration 
@Transactional 
@TransactionConfiguration(defaultRollback = true) 
public class PfeApplicationTests { 

@Autowired 
private EntrepriseService service; 
@Autowired 
private PhoneService pService; 
@Autowired 
private LivreurService lService; 
@Autowired 
private CarService cService; 
@Autowired 
private ProduitService prService; 
@Autowired 
private ClientService clService; 
@Autowired 
private CommandeService cmdService; 
@Autowired 
private PositionLivreurService posService; 
@Autowired 
private LivraisonService livService; 

@Test 
public void contextLoads() { 
} 

@Test 
@Transactional 
public void manyToManyTest(){ 
    Produit produit1 = new Produit("Lavabo", 50, "Cassable"); 
    Livreur livreur1 = new Livreur("Adadi", "Soufiane", "03/03/1992", "0876543456"); 
    Client client1 = new Client("Ouali", "[email protected]", "0743453462", "Fes", "NoLogo"); 
    Livraison livraison1 = new Livraison("24/04/2015", "25/04/2015", false, false, livreur1); 
    Commande commande1 = new Commande("Validé", "25/04/2015", client1, livreur1, livraison1); 
    produit1.getCommandes().add(commande1); 
    commande1.getProduits().add(produit1); 
    cmdService.addCommande(commande1); 
    prService.addProduit(produit1); 
} 
} 
+0

您是否指定了級聯類型? http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Cascading –

+0

已經嘗試過,不起作用,我目前正試圖讓會話工廠在同一時間添加bean,然後提交併查看它給。 – Zouazou

回答

0

已解決!

我不得不在同一個Session上將它們添加到一個事務中然後提交。

+0

酷!請接受你自己的答案將其關閉。 – YoYo

+0

要等6個小時才能關閉它:)謝謝。 – Zouazou

0

類似地雷的早期發佈此問題。請參閱My original posting。我自己解決了這個問題 - 它基本上是一個執行中的錯誤,但是如果你只是將Set<>更改爲List<>,它可能會工作。你的情況是不同的,你正在使用一個春天的實施,但誰知道...

+0

我已經嘗試列表代替Set,但沒有運氣。 – Zouazou