【发布时间】:2016-10-17 14:52:55
【问题描述】:
我正在使用 JPA、Hibernate 和 MySQL
我得到以下异常
无法添加或更新子行:外键约束失败
@Entity
@Table(name = "my_payment_request")
public class Request implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(mappedBy = "request",cascade=CascadeType.ALL)
private List<PaymentItem> paymentItems;
}
@Entity
@Table(name = "my_payment_item")
public class PaymentItem {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne
@JoinColumn(name = "request_id", nullable=true)
private Request request;
}
public class Manager {
Request request = new Request();
List<PaymentItem> paymentItems = new ArrayList<PaymentItem>();
PaymentItem paymentItem1 = new PaymentItem();
paymentItem1.setRequest(request);
PaymentItem paymentItem2 = new PaymentItem();
paymentItem2.setRequest(request);
paymentItems.add(paymentItem1);
paymentItems.add(paymentItem2);
request.setPaymentItems(paymentItems);
}
休眠代码
Session session = sessionFactory.openSession();
session.beginTransaction();
request.setId((Long) session.save(request));
session.getTransaction().commit();
【问题讨论】:
-
你能解释一下你想用
request.setId((Long) session.save(request))做什么吗? -
我没有看到你有
request.setPaymentItems(paymentItems); -
@guido 我忘了把那一行放在这个问题中,但它在我的实际代码中
-
您试图在外键中保存一个值,该值在其引用的主键字段中不存在..
-
@ankit 在这种情况下,我想您需要先保存两个 paymentItems,然后再保存
setRequest(request),然后才能保存请求。