Я много раз видел, что по умолчанию спящий режим cascade
равен "none"
. То есть, если вы опустите тег cascade
в сопоставлении xml, он будет таким же, как "none"
.
Сегодня я наблюдал странное поведение, когда класс A, который один к классу B обновлял таблицы класса B (и даже зависимые коллекции B).
Добавление cascade="none"
устранило мою проблему.
Но мой вопрос остается тем же: что является каскадом по умолчанию для сопоставления многие-к-одному xml в спящем режиме?
ОБНОВЛЕНИЕ 6.05.20 Я подозреваю, что по умолчанию cascade
имеет какое-то внутреннее (не none
состояние) и в этом режиме объекты процесса гибернации с компонентами (в условиях гибернации). Во время сеанса отладки я заметил список «управляемых» объектов, которые не изменились, но помечены как «грязные» по неизвестной причине.
TL; DR
Образец xml отображение. AuditRecord относится к классу «многие к одному» для пользователей. Постоянные обновления AuditRecord (иногда!) Класс пользователя и зависимые коллекции.
<hibernate-mapping default-lazy="false" default-access="field">
<class name="package.AuditRecord" table="audit_record">
<id name="uuid" type="string">
<column name="uuid" sql-type="char(32)" not-null="true" />
<generator class="assigned" />
</id>
<many-to-one name="user" class="package.User" cascade="none">
<column name="user_uuid" sql-type="char(32)" not-null="false" />
</many-to-one>
<property name="success" type="boolean" not-null="true"/>
...
</class>
</hibernate-mapping>
Пример Java кода, который на самом деле сохраняется AuditRecord
класс.
Transaction tx = session.beginTransaction();
try {
session.saveOrUpdate(pObject);
session.flush();
tx.commit();
} catch (Exception e) {
tx.rollback();
...