我試圖在Spring環境中安裝Envers。一切工作正常,當我手動通過SessionFactory獲取會話,把一切事務內部:Hibernate Envers with Spring using HibernateTemplate
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
TestEntity test = new TestEntity();
test.setTest("REV1");
session.save(test);
tx.commit();
tx = session.beginTransaction();
test.setTest("REV2");
session.save(test);
tx.commit();
上面的代碼將數據插入到TestEntity表也會更新AUD-和REVINFO桌。
但是,當我使用我們的DAO更新表時,Envers特定的表沒有任何反應。我懷疑原因可能是DAO中的using HibernateTemplate。
HibernateDaoSupport dao;
...
HibernateTemplate hibernateTemplate = dao.getHibernateTemplate();
TestEntity test = new TestEntity();
test.setTest("REV1");
hibernateTemplate.saveOrUpdate(test);
test.setTest("REV2");
hibernateTemplate.saveOrUpdate(test);
我的春天,配置爲SessionFactory看起來是這樣的:
<bean id="test-sessionFactory" class=...>
<property name="dataSource" ref="test-dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="eventListeners">
<map>
<entry key="post-insert" value-ref="enversListener" />
<entry key="post-update" value-ref="enversListener" />
<entry key="post-delete" value-ref="enversListener" />
<entry key="pre-collection-update" value-ref="enversListener" />
<entry key="pre-collection-remove" value-ref="enversListener" />
<entry key="post-collection-recreate" value-ref="enversListener" />
</map>
</property>
</bean>
我已閱讀論壇 - 和博客條目包括this one頗多,即從Envers常見問題掛鉤,但在我的情況下似乎沒有任何提及。
有誰知道,如果可以配置Envers與Spring一起使用HibernateTemplate(而不是JPA)?我需要更改哪些部分的配置? Hibernate文檔/ API的哪些部分值得關注(我恐怕我還不是Hibernate專家)?有人可以提供一個工作配置的代碼示例嗎?
我使用Spring 3.0.1和Hibernate 3.5.1。
`HibernateTemplate`沒有做什麼有趣的事,它只是簡化了的Hibernate API一點。事實上,目前的Spring文檔鼓勵你*不*使用`HibernateTemplate`,這裏就不再需要了。我認爲你的問題在別處。 – skaffman 2011-02-08 15:23:01
你如何管理交易? – axtavt 2011-02-08 18:03:42