繁体   English   中英

JPA级联不插入外键

[英]JPA cascade not inserting foreign key

我有2个实体类 - Order和OrderDetail。 以下是这两个类的代码片段。

@Entity
@Table(name="orders")
@IdClass(OrderPK.class)
public class Order implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Id
private String customerEmail;

@Column(name="advance_order_time")
private Date advanceOrderTime;

@Column(name="amount")
private float amount;

@OneToMany(mappedBy = "order", fetch = FetchType.LAZY, cascade =   CascadeType.PERSIST)
private Set<OrderDetail> orderDetailList;

public void addOrderDetail(OrderDetail orderDetail) {
     if (orderDetail != null) {
        if (orderDetailList == null) {`enter code here`
            orderDetailList = new HashSet<OrderDetail>();          
        }
        orderDetailList.add(orderDetail);
        orderDetail.setOrder(this);
     }
}
}

@Entity
@Table(name="order_details")
public class OrderDetail implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;

@Column(name="item_code")
private String itemCode;

@ManyToOne
@MapsId("id")
private Order order;

}

public class OrderPK implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;

private int id;

@Column(name="customer_email")
private String customerEmail;

}

Order对象和OrderDetail对象的集合在数据库中成功插入,但OrderDetail的order_id列在null中。 以下是代码段。

entityManager.persist(kfcOrder);

订单表具有复合密钥ID和customer_email。 此id是列order_id的表order_details的外键。

请建议一个解决方法,以便在order_details表的数据库order_id中持久保存订单对象时也会保存。

尝试这个..

@ManyToOne(optional = false)
@JoinColumns({
      @JoinColumn(name = "ORDER_ID",referencedColumnName = "id"),
      @JoinColumn(name = "EMAIL",referencedColumnName = "customerEmail")
})
@MapsId("id")
private Order order;

如果父项不存在, optional = false将确保不存在子项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM