2010-07-27 5 views
3

Je suis arrivé à deux entités:JPA: un problème persistant clé étrangère

client Entité

@Entity 
public class Customer { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 

private String name; 

@OneToMany(mappedBy="customer", cascade=CascadeType.ALL) 
private List<Facility> facilities; 

//Setter and Getter for name and facilities 

public void addFacility(Facility facility){ 
    this.facilities.add(facility); 
} 
} 

Facility Entité

@Entity 
public class Facility { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 

@ManyToOne 
@JoinColumn(name="CUSTOMER_FK") 
private Customer customer; 

private String name; 

//Setter and Getter, equals and hashcode 
... 
} 

Donc, dans mon principal que je fais

Customer customer = new Customer(); 
    customer.setName("Wake Forest University"); 
    Facility facility = new Facility(); 
    facility.setName("Tom Cruise"); 
    EntityManager entityManager = Persistence.createEntityManagerFactory("EntityClassPU").createEntityManager(); 
    entityManager.getTransaction().begin(); 
    customer.addFacility(facility); 
    entityManager.persist(customer); 
    entityManager.getTransaction().commit(); 

Wake Forest University est inséré avec succès dans Customer, et Tom Cruise est inséré avec succès dans Facility, mais à l'intérieur Facility, la valeur CUSTOMER_FK est nulle, ce qui suggère que je échoue à persister la contrainte de clé étrangère. Qu'est-ce que j'ai fait de mal ici?

Répondre

8

Votre relation entre Customer et Facility est une association bidirectionnelle, vous devez gérer les deux côtés de l'association. Vous pouvez le faire manuellement, mais je suggère de le faire dans la méthode addFacility():

public void addFacility(Facility facility){ 
    if (this.facilities == null) { 
     this.facilities = new ArrayList<Facility>(); 
    } 
    this.facilities.add(facility); 
    facility.setCustomer(this); // that's the part you're currently missing 
} 
+0

vous êtes génial. Merci homme: D –

+0

@HarryPham: De rien! –

+0

Super !! ceci a résolu mon problème aussi ... – venomrld

Questions connexes