我有两个项目:
persistence.xml
文件EntityManagerFactory
使用自定义属性进行实例化,例如hibernate.connection.*
我想分发beans.jar以方便客户端编程。到目前为止还不错。
有些实体在@PrePersist
事件中有代码(实际上是salting密码哈希),我不想分发。我可以将该代码推送到JPA实体监听器,但是监听器类在@EntityListeners
注释中被引用,因此也必须在beans.jar中。
是否可以在运行时上为一个(或所有)实体类设置JPA实体侦听器,即在rest.war项目中?
也许有一些Hibernate属性,我忽略了...... 感谢。
答案 0 :(得分:0)
这为所有实体设置了一个通用的EntityListener。
创建一个名为orm.xml的文件,并将其放在与persistence.xml文件相同的目录中(例如META-INF)。我不确定这是否可以放在war文件中。 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>
然后创建一个名为Listener的类。
package nathan.db;
import javax.persistence.PrePersist;
public class Listener
{
@PrePersist
public void event(Object entity)
{
// salt password
}
}