gpt4 book ai didi

hibernate - JPA (Hibernate) 和在运行时设置实体监听器

转载 作者:行者123 更新时间:2023-12-03 04:27:50 26 4
gpt4 key购买 nike

我有两个项目:

  • beans.jar 与 JPA 实体(针对 JSON/XML 序列化进行注释)和 persistence.xml 文件
  • rest.war 与 REST 应用程序,其中使用自定义属性(例如 hibernate.connection.*)实例化 JPA EntityManagerFactory

我想分发 beans.jar 以获得更好的客户端编程便利。到目前为止还不错。

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

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

也许有一些 Hibernate 属性用于此目的,但我忽略了......谢谢。

最佳答案

这为所有实体设置了一个通用的 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
}
}

关于hibernate - JPA (Hibernate) 和在运行时设置实体监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11673022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com