使用hibernate 3.3.2.ga和Spring 3.0.5.RELEASE。Hibernate DefaultSaveOrUpdateEventListener檢查插入和更新數據庫事件
有描述here實現的東西..
有不同的配置,因爲我; M用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(...
但是在我擴展的DefaultSave OrUpdateEventListener(bean名爲auditEntityListener)我想知道是否有任何方法來確定被保存到數據庫的對象是新記錄還是更新到存在?
我試着尋找
EntityEntry entityEntry = event.getEntry();
if (entityEntry.isExistsInDatabase())
{.....
但entityEntry爲空,因爲我知道一個實體在數據庫中存在。
SaveOrUpdateEvent上的其他方法,如getRequestedId()和getResultId()也會返回null。
我如何確定hibernate調用是否是從DefaultSaveOrUpdateEventListener插入或更新?
謝謝你 - 我確實最初有2個監聽器正在監聽預插入和預更新事件(使用提供的接口),但事件監聽器沒有得到任何事件,因爲只有save-update事件被觸發爲我的DAO調用.getCurrentSession()。saveOrUpdate(... 如果唯一的事件是保存更新事件,我將如何獲得hibernate調度到正確的偵聽器? – n99 2011-06-09 10:04:29
也調用getEntityState(event.getEntity() ,event.getEntityName(),event.getEntry(),event.getSession())不像event.getEntry()那樣工作,因爲它像檢查上面提到的if(entityEntry.isExistsInDatabase())時那樣引發NPE。 ....... – n99 2011-06-09 14:46:36
沒有看到你所有的上下文代碼,這聽起來像你的實體可能會在你調用saveOrUpdate時被分離。 r getEntityState()來查看它是如何工作的:http://www.docjar.com/html/api/org/hibernate/event/def/AbstractSaveEventListener.java.html – 2011-06-09 17:33:42