Spring JPA + Hibernate:OneToMany双向持久化

时间:2016-11-23 00:47:58

标签: hibernate jpa mapping one-to-many database-integrity

如何在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:   列'注册'不能为空

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

enter image description here

直到发生异常并且“HH000010:批量发布时它仍然包含JDBC语句”才会被执行。

请帮助我,禁用Hibernate批处理或了解什么是错误的?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

查看代码列“注册”表注册应该是主键和自动增量。如果不是这样,请与您的表格核实。

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