JPA:持久化外键约束的问题

Tha*_*ham 3 orm persistence jpa foreign-keys java-ee

我有两个实体:

客户实体

@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);
}
}
Run Code Online (Sandbox Code Playgroud)

设施实体

@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
...
}
Run Code Online (Sandbox Code Playgroud)

所以在我的主要内容中,我这样做

    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();
Run Code Online (Sandbox Code Playgroud)

Wake Forest University是成功插入Customer,并Tom Cruise成功插入Facility,但在里面Facility,CUSTOMER_FK值为null,这表明我失败持久的外键约束.我在这做错了什么?

Pas*_*ent 8

Customer和之间的关系Facility是双向关联,你必须管理关联的双方.您可以手动执行此操作,但我建议您在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
}
Run Code Online (Sandbox Code Playgroud)