0

如何在 oneToMany 关系中保留子实体?

@Entity
public class Payment implements Serializable {

  @ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
  @JoinColumn(name = "registration", nullable = false)
  private Registration registration;
}

@Entity 
public class Registration implements Serializable {

 @OneToMany(mappedBy="registration", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
 private List<Payment> payment;
}

在注册创建时,如果注册列在付款表中不可为空:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列“注册”不能为空

但是,如果注册可以为空,则创建付款但注册列为 null :

在此处输入图像描述

直到发生异常并执行“HH000010:在批处理发布时它仍然包含 JDBC 语句”。

请你能帮助我,禁用 Hibernate 批处理或了解有什么问题吗?

4

2 回答 2

0

通过查看您的代码列“注册”表注册应该是主键和自动增量。如果不是这样,请与您的表进行验证。

如果子表的主键未设置为主键并在表中自动递增,则通过此错误休眠。

于 2016-12-27T17:43:23.333 回答
0

您需要保留注册实体。

初始化您的注册对象

Registration reg = new Registration();

List<Payment> lstPayment = new ArrayList<Payment>();
for loop...
    Payment pay = new Payment();
    // imp point
    pay.setRegistration(reg);
    lstPayment.add(pay);
for loop ends //

reg.setLstPayment(lstPayment);

//persist Registration entity 
em.persist(reg);
于 2016-11-23T05:58:08.617 回答