【问题标题】:JPA: Problem with persisting Foreign Key ConstraintJPA:持久外键约束的问题
【发布时间】:2011-03-21 21:30:18
【问题描述】:

我有两个实体:

客户实体

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

设施实体

@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
...
}

所以我主要是这样做的

    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成功插入CustomerTom Cruise成功插入Facility,但在Facility内部,CUSTOMER_FK值为null,提示我持久化外键约束失败.我在这里做错了什么?

【问题讨论】:

    标签: jpa jakarta-ee persistence foreign-keys orm


    【解决方案1】:

    CustomerFacility 之间的关系是双向关联,您必须管理关联的双方。您可以手动执行此操作,但我建议在 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
    }
    

    【讨论】:

    猜你喜欢
    • 2013-08-12
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2010-12-07
    • 1970-01-01
    相关资源
    最近更新 更多