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

时间:2018-03-06 02:13:41

标签: spring hibernate jpa spring-data-jpa

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

1 个答案:

答案 0 :(得分:0)

您可以在EventListenerRegistry上注册EntityListeners。

只需打开SessoinFactory,就像:

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