У меня есть соединение OneToMany между таблицами Результат и ResultAux. Я могу получить набор ResultAux Объекты с Результат. После этого я добавляю несколько объектов ResultAux, чтобы установить и использовать merge для каждой записи набора для сброса изменений в базу данных. Как это:Спящий режим: новая или старая запись
Set<ResultAux> resultAuxes = result.getResultAuxes();
if (resultAuxes != null) {
for (ResultAux resultAux : resultAuxes) {
resultAux = getDaoFactory().getResultAuxDAO().merge(resultAux);
}
}
Для некоторых дополнительных действий, мне нужно знать, установить запись в новую запись и будет вставлена в таблицу, или это старый и (модифицированный или нет) будет обновляться. Я заметил, что все записи ResultAux уже имеют идентификатор, поэтому я не могу проверить его на null как я сделал для других таблиц. Есть ли способ определить такую вещь (возможно, не включать дополнительные библиотеки)?
EDIT:
<hibernate-mapping>
<class name="ResultAux" table="RESULT_AUX">
<id name="id" column="ID">
<generator class="native" />
</id>
<property name="additinalInfoType" column="AITYPE" type="dao.hibernate.utl.AdditinalInfoEnumType" />
<property name="sorter" column="SORTER" />
<property name="value1" column="VAL1" />
<property name="value2" column="VAL2" />
<many-to-one name="result" column="RESULT_ID" class="Result" />
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="Result" table="RESULT">
<id name="id" column="ID">
<generator class="native" />
</id>
<property name="questionNumber" column="Q_NUM" />
<property name="answerNumber" column="A_NUM" />
<property name="questionGroup" column="Q_GRP" />
<property name="answerValue" column="A_VAL" />
<set name="resultAuxes" inverse="true" cascade="all-delete-orphan"
lazy="false">
<key column="RESULT_ID" />
<one-to-many class="ResultAux" />
</set>
</class>
</hibernate-mapping>
Я бы сказал, что объект, не имеющий постоянного доступа, не имеет идентификатора. Вы уверены, что у каждой записи набора есть идентификатор? – sp00m
Я думаю, вы не должны использовать слияние в resultAux, но в классе результатов, hibernate должен обрабатывать одно для многих отношений. Не могли бы вы также разместить свою конфигурацию отображения? –
@ sp00m: Hibernate не моя сильная сторона. У меня есть некоторые сомнения в том, что происходит, когда я добавляю запись в набор ResultAux, полученный из объекта Result. Кроме того, набор результатов Result's сохраняется выше заданного кода. Возможно, это каскадирование, что делает ResultAux'es постоянным в точке выполнения этого кода. –