繁体   English   中英

Hibernate级联在保存时引发异常

[英]Hibernate cascading throws Exception on save

我正在尝试在数据库中插入一个对象。 它包含一个也应该插入的集合,但是我在下面遇到了异常:

SQLServerException: Cannot insert the value NULL into column 'ID_CUSTOMER', table 'dbo.CUSTOMER_ADDRESS'; column does not allow nulls. INSERT fails.

映射如下:

客户数据库

@OneToMany(fetch = FetchType.LAZY, mappedBy = "customer", orphanRemoval = true, cascade = CascadeType.ALL)
private List<CustomerAddressDB> addresses;

CustomerAddressDB.java

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
@JoinColumn(name = "ID_CUSTOMER", nullable = false, updatable=false, insertable=false)
private CustomerDB customer;

因此,当我为CustomerDB实体调用持久方法时,我可以看到正在执行的HQL:

Hibernate: insert into M2M_CUSTOMER (NM_COMPANY_NAME, DT_CREATED, ID_PARENT, ID_LAYER, DS_OBS, DS_SHORT_NAME, ID_CUSTOMER_STATUS, NM_TRADING_NAME) values (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into M2M_CUSTOMER_ADDRESS (DS_CITY, DS_COUNTRY, NR_NUMBER, NR_POSTAL_CODE, DS_STATE, DS_STREET, ID_ADDRESS_TYPE) values (?, ?, ?, ?, ?, ?, ?)

但是在此之后,抛出了前面提到的异常。 我不明白为什么它说CUSTOMER_ID为空,因为在地址之前插入了客户。 是否存在映射错误?

谢谢!

您是在告诉Hibernate,不应插入或更新Address实体中的客户,因此Hibernate不会插入它。 更换

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
@JoinColumn(name = "ID_CUSTOMER", nullable = false, updatable=false, insertable=false)
private CustomerDB customer;

通过

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
@JoinColumn(name = "ID_CUSTOMER", nullable = false)
private CustomerDB customer;

暂无
暂无

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

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