2015-08-04 3 views
1

У меня есть несколько случаев отказа для однонаправленной JPA2 @OneToMany отношений ниже фрагмент кодаJPA Однонаправленный @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; 

.... 
} 

В этом случае не удается создать Entity менеджер завода во время запуска сервера со следующей ошибкой

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] 

запуск сервера все хорошо, когда я удалить атрибут referencedColumnName из @JoinColumn аннотацию

Но когда я пытаюсь упорствовать сущность он не ниже, являются Hibernate генерироваться следы для отказа (CUSTOMER_ID is the name of the identity generated PK column in CUSTOMER table and FK in the CUSTOMER_ADDRESS table)

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. 

Что является причиной для отказа в первом случае, и как заставить его работать либо Кстати, любая помощь очень ценится.

+0

Можете ли вы подтвердить, что ваша аннотация @JoinColumn с «именем» и «referendedColumnName» в порядке? Пример: имя: Если соединение является однонаправленным отображением OneToMany с использованием стратегии сопоставления внешнего ключа, внешний ключ находится в таблице целевого объекта. referencedColumnName: при использовании с однонаправленным отображением внешнего ключа OneToMany ссылочный столбец находится в таблице исходного объекта. –

+0

Если вы действительно хотите иметь _навигационное_состояние «OneToMany», вы проверяете [отношение «один ко многим» с таблицей объединения] (http://stackoverflow.com/questions/1378248/one-to-many-relationship-with -join-таблица). –

+0

@ Mário Kapusta: Внешний ключ находится в целевой сущности, в то время как я помещал Joincolumn в исходную сущность. Поскольку я хочу получить адрес только от субъекта Клиента, а не как автономные данные, в этом случае он может не иметь никакой ценности в качестве данных. Так что в соответствии с вашим комментарием JoinColumn (name = "CUSTOMER_ID", referencedColumnName = "CUSTOMER_ID") закрытый список

customerAddresses; должен вызвать ошибку в этом случае? –

ответ

-1

Возможно, приведенные ниже ссылки могут дать вам дополнительную информацию об отношениях oneToMany.

Указывает на использование mappedBy с родительской стороны и использование JoinColumn в childs.

JPA JoinColumn vs mappedBy

+0

Он говорит о ссылке _unidirectional_. В этом случае нет смысла использовать 'mappedBy', потому что тот используется в _bidirectional_ ссылках. –

+0

Мои извинения; Я просто пропустил однонаправленную часть. Спасибо что подметил это. – Mihir

1

Я была такая же проблема. Добавлен @JoinColumn(nullable = false, ...).

+0

Спасибо. Работал для меня :) – mdziob

Смежные вопросы