2011-11-23 5 views
3

J'essaye de persister des entités avec des relations @OneToMany et @ManyToOne.JPA persistent avec OneToMany ManyToOne

problème
@OneToMany(mappedBy="customer", cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
private Collection<Address> addresses = new LinkedHashSet<Address>(); 

@ManyToOne 
@JoinColumn(name="customer_id", referencedColumnName="customer_id") 
private Customer customer; 

est qu'il insère NULL au lieu de customer_id dans le tableau address.

pourriez-vous suggérer pourquoi cela se passe-t-il?

Merci d'avance.

+1

Veuillez afficher les mappages complets (sans les constructeurs et les méthodes) plus le code que vous utilisez pour persister. -> éditer la question – Kawu

+0

un petit code effectuera réellement la transaction sera utile! –

+0

C'est juste un tir aveugle ici si vous ne nous montrez pas le code pour l'opération de persistance réelle. –

Répondre

4

Cela signifie probablement que vous n'avez pas initialisé le champ customer des adresses. Si ce n'est pas la solution, montrez-nous votre code.

+0

public void createCustomer (client client) { \t \t em.persist (client); \t \t em.flush(); \t} ce code est réel qui crée des clients et ici j'ajouter une adresse dans la collecte d'adresse ApplicationContext applicationContext = new ClassPathXmlApplicationContext ("META-INF/printemps/app-context.xml"); \t \t Client c = nouveau client(); \t \t c.setName ("Bruce Eckel"); \t \t Adresse a = new Adresse(); \t \t c.getAddresses(). Add (a); \t \t a.setAddress ("sous-marin str. # 45"); \t \t // Récupérer le bean de service \t \t CustomerService service = applicationContext.getBean ("customerService", CustomerService.class); \t \t service.createCustomer (c); – George

+2

Donc, ma réponse est correcte. Vous avez manqué a.setCustomer (c); –

+0

oh année merci. Je sais qu'il y avait quelque chose de simple et que je pouvais réaliser ce que :) merci beaucoup! – George

Questions connexes