Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果使用Spring使用JNDI的EntityManagerFactory,为什么我的本地JPA设置不受尊重?_Spring_Jpa_Spring Data_Spring Data Jpa_Wildfly 8 - Fatal编程技术网

如果使用Spring使用JNDI的EntityManagerFactory,为什么我的本地JPA设置不受尊重?

如果使用Spring使用JNDI的EntityManagerFactory,为什么我的本地JPA设置不受尊重?,spring,jpa,spring-data,spring-data-jpa,wildfly-8,Spring,Jpa,Spring Data,Spring Data Jpa,Wildfly 8,AuditingEntityListener在使用LocalContainerEntityManagerFactoryBean时,在dev模式(mvn jetty:run)下正确更新标有@LastModifiedDate、@CreatedBy和@LastModifiedBy的列。但是,当我在Wildfly 8中激活prodprofile并部署时,列不会更新 我在上找到:“您需要使用Spring的EntityManagerFactoryBean之一来设置EntityManagerFactory”是

AuditingEntityListener
在使用
LocalContainerEntityManagerFactoryBean
时,在
dev
模式(
mvn jetty:run
)下正确更新标有
@LastModifiedDate
@CreatedBy
@LastModifiedBy
的列。但是,当我在Wildfly 8中激活
prod
profile并部署时,列不会更新

我在上找到:“您需要使用Spring的EntityManagerFactoryBean之一来设置EntityManagerFactory”是否有任何方法可以将
AuditingEntityListener
EntityManagerFactory
一起使用

这是我的
applicationContext.xml

<beans profile="dev">
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${database.driver}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.username}" />
        <property name="password" value="${database.password}" />
    </bean>
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="persistenceXmlLocation" value="classpath:/META-INF/local-container-persistence.xml" />
    </bean>
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
</beans>

<beans profile="prod">
    <jee:jndi-lookup id="dataSource" jndi-name="java:jboss/datasources/postgresql-datasource" lookup-on-startup="false" expected-type="javax.sql.DataSource" />
    <jee:jndi-lookup id="entityManagerFactory" jndi-name="java:jboss/entity-manager-factory" lookup-on-startup="false" expected-type="javax.persistence.EntityManagerFactory" />
    <tx:jta-transaction-manager />
</beans>

<jpa:repositories base-package="com.corp.repository" factory-class="com.corp.RespositoryFactoryBean" />
<jpa:auditing auditor-aware-ref="entityAuditorAware" />
<bean name="entityAuditorAware" class="com.corp.EntityAuditorAware" />
<?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 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>
tl;博士 确保从JNDI获取的
EntityManagerFactory
配置为将
AuditingEntityListener
应用于获取的持久化单元

细节 在您的
dev
配置文件中,
EntityManagerFactory
是在您的应用程序中创建的,因此根据规范中的定义,它考虑本地可用的
orm.xml


在您的
prod
示例中,您不会在本地引导
EntityManagerFactory
,而是从应用程序服务器获取预配置的。因此,首先必须确保在应用程序服务器中按照预期配置了
EntityManagerFactory
实例。

Oliver,感谢您抽出时间
AuditingEntityListener
被初始化,但
touchForCreate
touchForUpdate
方法中的
handler
为空,因此列不会被更新。调试
AuditingBeanFactoryPostProcessor
我看到
BeanDefinitionUtils.getEntityManagerFactoryBeanNames
返回一个空的
集合
,因为
BeanFactoryUtils.BeanNamesfortype包含祖先
返回和空的
集合
AbstractEntityManagerFactoryBean.class