Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA/Hibernate问题(@PrePersist,会话API澄清)_Java_Hibernate_Session_Jpa - Fatal编程技术网

Java JPA/Hibernate问题(@PrePersist,会话API澄清)

Java JPA/Hibernate问题(@PrePersist,会话API澄清),java,hibernate,session,jpa,Java,Hibernate,Session,Jpa,我目前正在我的应用程序上创建一些测试。 我面临一个问题,需要涉及JPA的@PrePersist特性。 不幸的是,这些拦截器在持久化、更新(etc)时没有被触发,我发现在Hibernate的会话API中,这个特性不起作用。我的问题来了 应用程序中使用会话API的主要证据是什么?是否有机会直接检索EntityManager以触发触发器 我非常感谢任何关于这个话题的提示和建议 应用程序中使用会话API的主要证明是什么 过于简单化的是,EntityManager API是围绕原始会话API的“外壳”。但

我目前正在我的应用程序上创建一些测试。 我面临一个问题,需要涉及JPA的@PrePersist特性。 不幸的是,这些拦截器在持久化、更新(etc)时没有被触发,我发现在Hibernate的会话API中,这个特性不起作用。我的问题来了

应用程序中使用会话API的主要证据是什么?是否有机会直接检索EntityManager以触发触发器

我非常感谢任何关于这个话题的提示和建议

应用程序中使用会话API的主要证明是什么

过于简单化的是,EntityManager API是围绕原始会话API的“外壳”。但是我想你需要另一个答案:-)我能给出的唯一的另一个答案是检查源代码。或者,如果没有源代码,则需要更改日志记录配置。对于会话类,将其设置为“trace”,这样您就可以准确地看到调用它的时间

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

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

此外,如果您没有使用JPA API,您仍然可以在Hibernate中使用事件侦听器:


在我使用的应用程序中,似乎没有使用任何会话(没有使用对象会话,直接注入EntityManager),是的,据我所知,该应用程序遵循JPA,并避免使用任何特定于框架的解决方案,当然,如果EJB不需要后台的Session对象,也不自动处理它,那么如果我们使用JPA,那么不触发预更新的原因是什么?我能想到的唯一原因是您的侦听器不在JPA部署单元中(带有META-INF/persistence.xml的JAR)。否则,实体管理器应自动检测并调用它。