如何在不使用带有java配置的spring的orm.xml中注册实体监听器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不使用带有java配置的spring的orm.xml中注册实体监听器?相关的知识,希望对你有一定的参考价值。

我有这个orm.xml文件来为所有实体全局注册AuditingEntityListener。

// orm.xml

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings 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 http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
                 version="2.0">

    <persistence-unit-metadata>
        <persistence-unit-defaults>
            <entity-listeners>
                <entity-listener
                    class="org.springframework.data.jpa.domain.support.AuditingEntityListener" />
            </entity-listeners>
        </persistence-unit-defaults>
    </persistence-unit-metadata>
</entity-mappings>

我知道我们可以使用带注释的抽象映射超类。但我不希望我的实体类扩展类。我正在使用kotlin数据类为实体类建模。

@MappedSuperClass
@EntityListeners(AuditingEntityListener.class)
public abstract class AbstractEntity {}

有没有办法在不使用带有java配置的orm.xml的情况下注册这个实体监听器?

答案

您可以在EventListenerRegistry上注册EntityListeners。

只需解开SessoinFactory:

 SessionFactoryImplementor sessionFactory = entityManagerFactory.unwrap( 
 SessionFactoryImplementor.class );
 sessionFactory
     .getServiceRegistry()
     .getService( EventListenerRegistry.class )
     .prependListeners( EventType.LOAD, new SecuredLoadEntityListener() );

以上是关于如何在不使用带有java配置的spring的orm.xml中注册实体监听器?的主要内容,如果未能解决你的问题,请参考以下文章

java ssm框架中SpringMVC中具体如何配置啊,求各位知友们告诉一下,最好全

如何在带有注解配置的spring mvc中使用spring数据

对于带有 Derby db 的 Spring MVC 项目,我应该使用啥 ORM?

SpringBoot整合ORM开发框架MyBatis和JPA

如何在不使用查询缓存的情况下缓存 Spring Data JPA 查询方法的结果?

使用 Spring Security 和 Redis 对带有 Java 配置的 RESTFul api 进行基于 Cookie 的身份验证