2015-03-16 2 views
0

У меня есть родительской таблицы DataVO, который содержит список, как этотпервичного ключа родительской таблицы не обновляется в детской таблице в Hibernate Envers

@OneToMany(fetch=FetchType.EAGER, cascade = CascadeType.ALL) 
@JoinColumn(name= "DATA_NUM", nullable = false) 
@AuditJoinTable(name="EP_DATA_STUS_AUD") 
private List<DataStatusVO> dataStatusVOList = new ArrayList<DataStatusVO>(); 

DATA_NUM является первичным ключом родительской таблицы ,

Все работает отлично, за исключением того факта, что DATA_NUM является нулем в таблице DATA_STUS_AUD. Но, DATA_NUM заселяет в родительском и объединенном столе («EP_DATA_STUS_AUD»).

Я получаю эту ошибку, когда я удалить вкладыш = ложь и обновление = ложь от

@Column(name = "DATA_NUM") 
private String dataNum; 

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.envers.DuaStatusVO column: DATA_NUM (should be mapped with insert="false" update="false") 

Любые понятия о том, чтобы сделать эту работу?

Благодаря

ответ

0

Hibernate Вставки дочерние элементы первого, а затем обновляет внешние ключи. В вашем случае первая запись в Data_status вставлена, а затем спящий режим обновляет Data_num.

Envers interceptor запускается только для сохранения, функция savaOrUpdate не для функции обновления. В вашем случае, когда Data_Status вставлен в таблицу без Data_num, перехватчик envers запускается, и он копирует его и вставляет в таблицу Audit.

Затем, когда спящий режим обновляет внешний ключ, не вызывается envers. Следовательно, вы не получите ни одного Data_Num в таблицах аудита.

Таблицы объединений принимают первичное ключевое значение родительских и дочерних таблиц из таблиц аудита вместе с оборотной информацией и вставляют запись. Поэтому в вашем случае Data_num из родительской таблицы и Data_Status_num из вашей дочерней таблицы.

Что касается ошибки, если вы хотите сохранить одно и то же родительское и дочернее отношение и удалить insert = false, update = false, удалить значение nullable = false из @JoinColumn (name = "DATA_NUM" nullable = false) в родительском отношении.

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