Hibernate DefaultSaveOrUpdateEventListener проверка на вставку и обновление событий базы данных - PullRequest
1 голос
/ 08 июня 2011

Использование hibernate 3.3.2.ga и Spring 3.0.5.RELEASE.

Реализовано что-то, как описано здесь ..

с другим конфигом, как у меня; я использую Spring управляемого sessionFactory

<bean id="sessionFactoryPGAD" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSourcePGAD"/>
.......
.......
<property name="eventListeners">
    <map>
        <entry key="save-update"><ref local="auditEntityListener" /></entry>
    </map>
</property>

добавить аудит, когда мои DAO звонят

...getCurrentSession().saveOrUpdate(...

Однако в моем расширенном DefaultSaveOrUpdateEventListener (bean-компонент audEntityListener) мне было интересно, есть ли способ определить, является ли объект, сохраняемый в БД, новой записью или обновлением существующей?

Я пытался посмотреть на

EntityEntry entityEntry = event.getEntry();
if (entityEntry.isExistsInDatabase())
{.....

но entityEntry равен нулю для сущности, которая, как я знаю, существует в БД.

Другие методы SaveOrUpdateEvent, такие как getRequestedId () и getResultId (), также возвращают ноль.

Как я могу определить, будет ли вызов hibernate вставкой или обновлением из DefaultSaveOrUpdateEventListener?

1 Ответ

0 голосов
/ 09 июня 2011

Метод, который вы ищете: getEntityState () .Вот пример его использования, взятый из исходного кода для DefaultSaveOrUpdateEventListener:

int entityState = getEntityState(
    event.getEntity(),
    event.getEntityName(),
    event.getEntry(),
    event.getSession()
);

switch ( entityState ) {
    case DETACHED:
        entityIsDetached( event );
        return null;
    case PERSISTENT:
        return entityIsPersistent( event );
    default: //TRANSIENT or DELETED
        return entityIsTransient( event );
}

Если вам нужно сделать что-то другое для сохранения и обновления, вы можете рассмотреть возможность иметь отдельные EventListener, один, который расширяет DefaultSaveEventListener, и одинэто расширяет DefaultUpdateEventListener и позволяет Hibernate отправлять сообщения нужному слушателю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...