Моя модель:Update отец на перехватчика
public class Father {
Set<Son> sons = new HashSet<Son>();
String name = null;
Date lastSonModifyDate = null;
// ... other fields and setters/getters
}
public class Son {
Father father = null;
String name = null;
Date lastModifyDate = null;
// ... other fields and setters/getters
}
использования:
- Существует в БД
Father
объект сSon
объекта, связанного (BiDir). - Загрузить от отца DB.
- Обновить имя поля для отца.
- Обновить имя поля для сына.
- Постоянный отец.
Мой перехватчик сначала обнаруживает отцы обновления (onFlushDirty). Затем исполняет onFlushDirty для сына. В этом случае я обновляю son.lastModifyDate , а также father.lastSonModifyDate.
Когда исполнение заканчивается, все обновления сохраняются за исключением father.lastSonModifyDate. Я думаю, что это происходит потому, что отец находится в сессии и обновляется до сыновей, поэтому этот объект переопределяет изменения, сделанные методом onFlushDirty для объекта son.
Как я мог достичь своего знака (установить lastSonModifyDate отца от перехватчика сына)?
Спасибо.
Я не могу сделать это в DAO, потому что объекты сына, как правило, сохраняется/обновляется каскадом от объектов Дедов ... так что я не могу контролировать. Возможно, уровень базы данных - хорошее решение. Но, «сгенерировано» означает, что механизм базы данных создает временную привязку? действительно мне нужно установить атрибуты даты в конкретном формате, не поддерживаемые каким-либо движком db ... – Alberthoven
Не уверен, что вы подразумеваете под «обновлением каскадом ... поэтому я не могу его контролировать». Если у вас есть, скажем, метод 'updateFather()' в вашем DAO, что мешает вам отмечать любые объекты, которые вы хотите, перед вызовом session.update()? Что касается базы данных, что означает «конкретный формат»? Дата - это дата (время/время, независимо), она сохраняется как таковая. Как вы отформатируете его в своем приложении, это совершенно другая история. – ChssPly76
Хорошо, я почти никогда не называю DAO.saveOrUpdate для объектов Сон, но только для объектов Отца ... поэтому элементы Сон, связанные с Отцом, сохраняются в каскаде (с org.hibernate.annotations.Cascade). Во-вторых, я боюсь, что я не был полностью искренен в отношении полей даты: на самом деле, Father.lastSonModifyDate и Son.lastModifyDate представляют даты, но их тип - String, потому что используется String DateFormatter для чтения и записи их значений. .. Это причина, потому что формат мой «не поддерживается». – Alberthoven