Обновление силы в спящем режиме

Как заставить Hibernate обновлять экземпляр объекта, даже если объект не загрязнен? Я использую Hibernate 3.3.2 GA, Hibernate Annotations и Hibernate EntityManager кстати. Я действительно хочу, чтобы Hibernate выполнял общий оператор UPDATE, даже если никакое свойство в сущности не изменилось.

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

Спасибо!

Ответ 1

ok - нашел это сам. Это делает трюк:

Session session = (Session)entityManager.getDelegate();  
session.evict(entity);  
session.update(entity);

Ответ 2

Для переходных процессов вы можете проверить

if(session.contains(entity)) {
  session.evict(entity);
}
session.update(entity);

Ответ 3

session.evict(entity);  
session.update(entity);

Хороший трюк, но следите за переходными объектами, прежде чем вводить это в какой-либо код автоматизации. Для переходных процессов у меня есть StaleStateObjectException

Ответ 4

Попробуйте em.flush(), который используется для объектов EJB 3.0, который также использует JPA, аналогичную Hibernate 3.2.2 GA. Если он не работает нормально, используйте транзакции в режиме "скрытый".