2015-05-05 5 views
2

Редактировать: Я неправильно истолковал документацию о спящем режиме, @PrePersist делает именно то, что я хотел. Stackoverflow не позволит мне удалить вопрос, поэтому я оставлю его здесь для развлечения других.Hibernate callback перед первым упорством


Есть ли обратный вызов в спящем режиме, прежде чем сущность будет сохранена в первый раз? У меня есть некоторые вычисления, которые должны выполняться над сущностью, прежде чем он будет сохранен в первый раз, но не должен повторяться после того, как объект был записан в БД один раз.

Я ищу что-то вроде @PrePersist, но это называется только до первого упорства.

+0

Почему это не так? возможность сделать ваши вычисления до 'session.persist (object)' call? – dit

+0

В этом случае мне нужно вычислить идентификатор для объекта, который является для каждого пользователя, и идентификатор не должен меняться после создания объекта – Robin

+0

, возможно, Interceptor может вам помочь. см. мой ответ. – dit

ответ

1

@PrePersist будет вызываться только один раз, когда объект сохраняется. В Hibernate, если вы сохраняете одно и то же лицо несколько раз, последние попытки не будут успешными, потому что объект уже сохраняется до этого, следовательно, не будет никаких случаев @PrePersist, вызываемых более одного раза для субъекта

0

Да. В вашем звонке @PrePersist вы можете выполнить действие только один раз. Вам нужен флаг, который скажет вам, что действие еще не было выполнено.

+0

Это выполнимо конечно, но предпочтет, если бы был уборщик путь, не требуя дополнительного флага – Robin

0

Если вы не хотите, чтобы реализовать вычисление внутри @PrePersist аннотированный метод, вы можете попытаться установить Entity Interceptor при открытии новой сессии гибернации:

Session session = sessionFactory.openSession(new MyBeforePersistInterceptor()); 
+0

Если я правильно понимаю это, это просто другой интерфейс для обратного вызова «PrePersist», правильно? Проблема не в интерфейсе, а в том, что я хочу разную семантику, чем предоставляет '@ PrePersist'. – Robin

+0

@Robin, может быть, вам следует точно объяснить, что вы хотите :) – dit

Смежные вопросы