Hibernate JPA单向@OnetoMany失败

Hibernate JPA单向@OnetoMany失败,hibernate,jpa-2.0,one-to-many,Hibernate,Jpa 2.0,One To Many,我有几个单向JPA2@OnetoMany关系的失败案例 下面是代码片段 @Entity @Table(name="CUSTOMER") @Access(AccessType.FIELD) public class Customer { @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) @JoinColumn(name="CUSTOMER_ID", referencedColumnName="CUSTO

我有几个单向JPA2@OnetoMany关系的失败案例 下面是代码片段

@Entity
@Table(name="CUSTOMER")
@Access(AccessType.FIELD)
public class Customer {

       @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
       @JoinColumn(name="CUSTOMER_ID", referencedColumnName="CUSTOMER_ID")
       private List<Address> customerAddresses;

....
}
当我从
@JoinColumn
注释中删除
referencedColumnName
属性时,服务器启动良好

但是,当我尝试持久化实体时,它失败了,下面是Hibernate生成的失败跟踪(
CUSTOMER\u ID是CUSTOMER表中标识生成的PK列的名称,而FK是CUSTOMER\u ADDRESS表中的名称


在第一种情况下,失败的原因是什么,以及如何使其发挥作用,我们非常感谢您提供的任何帮助。

下面的链接可能会为您提供有关oneToMany关系的更多信息

它表示在父端使用mappedBy,在子端使用JoinColumn


我也有同样的问题。添加
@JoinColumn(nullable=false,…)
修复了它。

您能确认您的注释@JoinColumn和“name”和“referencedColumnName”是正确的吗?示例:名称:如果联接用于使用外键映射策略的单向OneToMany映射,则外键位于目标实体的表中。referencedColumnName:当与单向OneToMany外键映射一起使用时,被引用的列位于源实体的表中。如果确实希望具有单向
OneToMany
映射,您应该检查一下。@Mário Kapusta:foreignkey位于目标实体中,而我将Joincolumn置于源实体中。因为我只想从客户实体中检索地址,而不是作为独立数据,在这种情况下,它作为数据可能没有任何价值。因此,根据您的评论JoinColumn(name=“CUSTOMER\u ID”,referencedColumnName=“CUSTOMER\u ID”)私有列表客户地址;在这种情况下应该会导致错误吗?您好(很抱歉我来晚了)…回答:是的…目标实体中应该有“referencedColumnName”-源实体的列,,,,,,,“name”-fk。在你的例子中,bug似乎在这里。他说的是单向链接。在这种情况下,使用
mappedBy
-是没有意义的,因为它用于双向链接;我只是错过了单向部分。谢谢你指出这一点,谢谢。为我工作:)甚至这件事也为我解决了,但它做了什么来解决它呢?此配置的含义是什么。@LokeshAgrawal-(可选)外键列是否可为空-在属性
可为空的
文档中已说明。如果将外键约束为NOTNULL,则必须指定
@JoinColumn(nullable=false)
。否则就不需要了。
DEBUG - Second pass for collection: xx.xxx.xxxxxxx.core.domainmodel.customerinfo.Customer.customerAddresses
 DEBUG - Binding a OneToMany: xx.xxx.xxxxxxx.core.domainmodel.customerinfo.Customer.customerAddresses through a foreign key
 DEBUG - Mapping collection: xx.xxx.xxxxxxx.core.domainmodel.customerinfo.Customer.customerAddresses -> CUSTOMER_ADDRESS
 DEBUG - Unable to build entity manager factory
java.lang.NullPointerException: null
 at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1456) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
DEBUG - Executing identity-insert immediately
DEBUG - insert into CUSTOMER (ESTABLISHMENT_DATE, ESTABLISHMENT_PLACE, MAJOR_PRODUCT, PAID_UP_CAPITAL, TYPE_OF_BUSINESS, COMPANY_REGISTRATION_NUMBER, CUSTOMER_TYPE, FAX_NUMBER, ID_EXPIRY_DATE, ID_ISSUE_DATE, ID_ISSUE_PLACE, ID_NUMBER, ID_TYPE, TELEPHONE_NO, ENGLISH_NAME, RACE, NATIONALITY, MALAY_NAME) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
DEBUG - Natively generated identity: 6
DEBUG - Executing identity-insert immediately
DEBUG - insert into CUSTOMER_ADDRESS (COUNTRY, ADDRESS_LINE1, ADDRESS_LINE2, ADDRESS_LINE3, ADDRESS_LINE4, PINCODE, STATE, ADDRESS_TYPE) values (?, ?, ?, ?, ?, ?, ?, ?)
DEBUG - could not execute statement [n/a]
com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert the value NULL into column 'CUSTOMER_ID', table 'xxxxxxx.xxx.CUSTOMER_ADDRESS'; column does not allow nulls. INSERT fails.