2013-07-10 2 views
0

Я пытаюсь вставить объект в базу данных. Он содержит коллекцию, которая также должна быть вставлена, но я получаю ниже исключение: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. 

отображение выглядит следующим образом:

CustomerDB.java

@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 имеет значение NULL, поскольку клиент вставлен перед адресом. Есть ошибка отображения?

Спасибо!

+0

Какие аннотаций вы имеете в поле 'ид' вашего клиента? –

ответ

0

Вы сообщаете 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;