JPA(Hibernate)和运行时设置实体侦听器

JPA(Hibernate)和运行时设置实体侦听器,hibernate,jpa,runtime,entitylisteners,Hibernate,Jpa,Runtime,Entitylisteners,我有两个项目: beans.jar带有JPA实体(注释为JSON/XML序列化)和persistence.XML文件 rest.war使用rest应用程序,JPAEntityManagerFactory在哪里使用自定义属性(如hibernate.connection)实例化。* 我想分发beans.jar,以便更好地进行客户端编程。到目前为止还不错 一些实体在@PrePersist事件中有代码(实际上是satting密码散列),我不想分发这些代码。我可以将该代码推送到JPA实体监听器,但监听

我有两个项目:

  • beans.jar带有JPA实体(注释为JSON/XML序列化)和
    persistence.XML
    文件
  • rest.war使用rest应用程序,JPA
    EntityManagerFactory
    在哪里使用自定义属性(如
    hibernate.connection)实例化。*
我想分发beans.jar,以便更好地进行客户端编程。到目前为止还不错

一些实体在
@PrePersist
事件中有代码(实际上是satting密码散列),我不想分发这些代码。我可以将该代码推送到JPA实体监听器,但监听器类在
@EntityListeners
注释中引用,因此也必须在beans.jar中

是否可以在运行时(即在rest.war项目中)为一个(或所有)实体类设置JPA实体侦听器

也许有一些Hibernate属性,我忽略了。。。
谢谢。

这将为所有实体设置通用EntityListener

创建一个名为orm.xml的文件,并将其与persistence.xml文件(例如META-INF)放在同一目录中。我不确定这是否可以放在战争档案中。orm.xml文件的内容应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.0" xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd">
   <persistence-unit-metadata>
      <persistence-unit-defaults>
         <entity-listeners>
            <entity-listener class="nathan.db.Listener"/>
         </entity-listeners>
      </persistence-unit-defaults>
   </persistence-unit-metadata>
</entity-mappings>
package nathan.db;

import javax.persistence.PrePersist;

public class Listener
{
   @PrePersist
   public void event(Object entity)
   {
      // salt password
   }
}