Ответ 1
ok - нашел это сам. Это делает трюк:
Session session = (Session)entityManager.getDelegate();
session.evict(entity);
session.update(entity);
Как заставить Hibernate обновлять экземпляр объекта, даже если объект не загрязнен? Я использую Hibernate 3.3.2 GA, Hibernate Annotations и Hibernate EntityManager кстати. Я действительно хочу, чтобы Hibernate выполнял общий оператор UPDATE, даже если никакое свойство в сущности не изменилось.
Мне нужно это, потому что некоторые прослушиватели событий должны быть вызваны для выполнения дополнительной работы, когда приложение запускается в первый раз.
Спасибо!
ok - нашел это сам. Это делает трюк:
Session session = (Session)entityManager.getDelegate();
session.evict(entity);
session.update(entity);
Для переходных процессов вы можете проверить
if(session.contains(entity)) {
session.evict(entity);
}
session.update(entity);
session.evict(entity);
session.update(entity);
Хороший трюк, но следите за переходными объектами, прежде чем вводить это в какой-либо код автоматизации. Для переходных процессов у меня есть StaleStateObjectException
Попробуйте em.flush(), который используется для объектов EJB 3.0, который также использует JPA, аналогичную Hibernate 3.2.2 GA. Если он не работает нормально, используйте транзакции в режиме "скрытый".