程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Spring 3.1 + Hibernate 4.1 JPA,实体管理器工厂已注册两次大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Spring 3.1 + Hibernate 4.1 JPA,实体管理器工厂已注册两次?

开发过程中遇到Spring 3.1 + Hibernate 4.1 JPA,实体管理器工厂已注册两次的问题如何解决?下面主要结合日常开发的经验,给出你关于Spring 3.1 + Hibernate 4.1 JPA,实体管理器工厂已注册两次的解决方法建议,希望对你解决Spring 3.1 + Hibernate 4.1 JPA,实体管理器工厂已注册两次有所启发或帮助;

您如何初始化Spring Application Context?您正在使用Spring MVC吗?

我有时看到Spring MVC XML配置导入其他应用程序。上下文XML,导致将某些bean实例化两次,因为它们是在应用程序上下文和Web应用程序上下文中声明的。

解决方法

我使用带有Hibernate 4.1的Spring Framework
3.1作为JPA提供程序,并且具有完整的功能设置,但是每次启动Web应用程序时,我都会看到以下警告消息:

14:28:12,725  WARN pool-2-thread-12 internal.EntitymanagerFactoryRegistry:80 - HHH000436: Entity manager factory name (something) is already registered.  If entity manager will be clustered or passivated,specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'

该应用程序正常运行,但是像这样的警告消息困扰着我,数小时的搜索,调整和试验使我无所适从。我试过更改工厂名称并添加和省略配置块,但无济于事。看来,Spring或Hibernate中的某些东西只是两次初始化了实体管理器工厂。

仅供参,我正在使用LocalContainerEntitymanagerFactoryBean的packagesToScan功能来配置实体管理器,而没有persistence.xml文件。

我已经将Spring上下文XML缩减为以下内容,问题仍然存在:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/scheR_674_11845@a/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLscheR_674_11845@a-instance"
       xmlns:context="http://www.springframework.org/scheR_674_11845@a/context"
       xsi:scheR_674_11845@aLOCATIOn="
           http://www.springframework.org/scheR_674_11845@a/context http://www.springframework.org/scheR_674_11845@a/context/spring-context.xsd
           http://www.springframework.org/scheR_674_11845@a/beans http://www.springframework.org/scheR_674_11845@a/beans/spring-beans.xsd">

  <context:property-placeholder LOCATIOn="classpath:jdbc.properties"/>
  <bean id="datasource" class="org.apache.tomcat.jdbc.pool.Datasource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.nightsword.driverClassNamE}"/>
    <property name="url" value="${jdbc.nightsword.url}"/>
    <property name="username" value="${jdbc.nightsword.usernamE}"/>
    <property name="password" value="${jdbc.nightsword.passworD}"/>
  </bean>

  <bean id="entitymanagerFactory" class="org.springframework.orm.jpa.LocalContainerEntitymanagerFactoryBean">
    <property name="jpaVendorAdapter">
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="datasource" ref="datasource"/>
    <property name="packagesToScan" value="x.y"/>
  </bean>
</beans>

为了完整起见,这里是hibernate.properties:

hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.ejb.entitymanager_factory_name=something

这是org.springframework.orm和org.hibernate的摘录调试级别日志输出。您可以看到如何在14:40:06,911首次注册EntitymanagerFactory,然后此后立即出现,LocalContainerEntitymanagerFactoryFactoryBean从头开始。嗯

INFO: Deploying web application archive /opt/local/share/java/tomcat7/webapps/nightsword.war
14:40:06,149  INFO pool-2-thread-13 jpa.LocalContainerEntitymanagerFactoryBean:264 - Building JPA container EntitymanagerFactory for persistence unit 'default'
14:40:06,219 DEBUG pool-2-thread-13 type.basicTypeRegistry:143 - Adding type registration Boolean -> org.hibernate.type.BooleanType@4cb91eff

...

14:40:06,882 DEBUG pool-2-thread-13 internal.SessionFactoryRegistry:62 - Initializing SessionFactoryRegistry : org.hibernate.internal.SessionFactoryRegistry@161bb7fe
14:40:06,882 DEBUG pool-2-thread-13 internal.SessionFactoryRegistry:75 - Registering SessionFactory: a3219dd8-7d59-45ac-9a5a-0d13e38dbb04 (<unnamed>)
14:40:06,882 DEBUG pool-2-thread-13 internal.SessionFactoryRegistry:82 - Not binding SessionFactory to JNDI,no JNDI name configured
14:40:06,882 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:487 - Instantiated session factory
14:40:06,882 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:1119 - checking 0 named HQL queries
14:40:06,883 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:1142 - checking 0 named SQL queries
14:40:06,887 DEBUG pool-2-thread-13 internal.StatisticsInitiator:110 - Statistics initialized [enabled=false]
14:40:06,910 DEBUG pool-2-thread-13 internal.EntitymanagerFactoryRegistry:56 - Initializing EntitymanagerFactoryRegistry : org.hibernate.ejb.internal.EntitymanagerFactoryRegistry@75cc9008
14:40:06,911 DEBUG pool-2-thread-13 internal.EntitymanagerFactoryRegistry:66 - Registering EntitymanagerFactory: something 
14:40:06,967  INFO pool-2-thread-13 jpa.LocalContainerEntitymanagerFactoryBean:264 - Building JPA container EntitymanagerFactory for persistence unit 'default'
14:40:06,967 DEBUG pool-2-thread-13 type.basicTypeRegistry:143 - Adding type registration Boolean -> org.hibernate.type.BooleanType@4cb91eff

...

14:40:07,128 DEBUG pool-2-thread-13 internal.SessionFactoryRegistry:75 - Registering SessionFactory: 81a9b5a6-83aa-46ee-be68-d642e6fda584 (<unnamed>)
14:40:07,128 DEBUG pool-2-thread-13 internal.SessionFactoryRegistry:82 - Not binding SessionFactory to JNDI,no JNDI name configured
14:40:07,129 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:487 - Instantiated session factory
14:40:07,129 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:1119 - checking 0 named HQL queries
14:40:07,129 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:1142 - checking 0 named SQL queries
14:40:07,129 DEBUG pool-2-thread-13 internal.StatisticsInitiator:110 - Statistics initialized [enabled=false]
14:40:07,130 DEBUG pool-2-thread-13 internal.EntitymanagerFactoryRegistry:66 - Registering EntitymanagerFactory: something 
14:40:07,130  WARN pool-2-thread-13 internal.EntitymanagerFactoryRegistry:80 - HHH000436: Entity manager factory name (something) is already registered.  If entity manager will be clustered or passivated,specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'
@H_616_39@@H_616_39@
@H_616_39@

大佬总结

以上是大佬教程为你收集整理的Spring 3.1 + Hibernate 4.1 JPA,实体管理器工厂已注册两次全部内容,希望文章能够帮你解决Spring 3.1 + Hibernate 4.1 JPA,实体管理器工厂已注册两次所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。