JPA / Hibernate问题(@PrePersist,Session API澄清)

时间:2011-02-02 08:27:27

标签: java hibernate session jpa

我目前正致力于在我的应用上创建一些测试。 我遇到了一个需要涉及JPA的@PrePersist功能的问题。 不幸的是,这些拦截器没有被解雇,而是持久化,更新(等),我发现使用Hibernate的Session API这个功能不起作用。这是我的问题。

在应用程序中使用Session API的主要证据是什么,是否有可能直接检索EntityManager以触发触发器?

我非常感谢有关此主题的任何提示和建议,

1 个答案:

答案 0 :(得分:3)

  

在应用程序中使用Session API的主要证据是什么

过度简化,EntityManager API是原始Session API的“shell”。但我想你想要另一个答案:-)我能给出的唯一其他答案是检查源代码。或者,如果您没有源代码,则需要更改日志记录配置。将它设置为Session类的“trace”,然后你可以确切地看到它被调用的时间。

  

并且是否有机会直接检索EntityManager以触发触发器?

当然,取决于您使用的应用程序服务器或框架。如果您有“真正的”应用程序服务器,则可以从中检索EM。如果您使用的是独立应用程序,则可以使用EntityManagerFactory创建EntityManager。但在此之前,我会检查Hibernate测试套件中的示例:

https://github.com/hibernate/hibernate-core/blob/master/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/LastUpdateListener.java

此外,如果你使用JPA API,你仍然可以在Hibernate中拥有事件监听器:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#objectstate-events