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

问题描述 投票:0回答:1

我有这个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的情况下注册这个实体监听器?

spring hibernate jpa spring-data-jpa
1个回答
0
投票

您可以在EventListenerRegistry上注册EntityListeners。

只需解开SessoinFactory:

 SessionFactoryImplementor sessionFactory = entityManagerFactory.unwrap( 
 SessionFactoryImplementor.class );
 sessionFactory
     .getServiceRegistry()
     .getService( EventListenerRegistry.class )
     .prependListeners( EventType.LOAD, new SecuredLoadEntityListener() );
© www.soinside.com 2019 - 2024. All rights reserved.