使用MergingPersistenceUnitManager加载实体

时间:2012-03-01 18:52:48

标签: spring hibernate jpa spring-data

我有一个项目设置,其中我有一个模块,该模块存在于父war文件的WEB-INF / lib文件夹中。该模块包含一个persistence.xml和一个实体,我需要在启动期间加载JPA容器时加载该实体。不知何故,我需要合并战争和lib jar的持久性单位。我的战争的persistence.xml存在于WEB-INF / classes / META-INF中,因此它将WEB-INF / classes作为持久性根,并且不会从我的lib jar中理解该实体。我发现了困难的方式。

我偶然发现多个人建议解决这个问题

http://ancientprogramming.blogspot.com/2007/05/multiple-persistencexml-files-and.html 我还发现Spring的Data-jpa项目有一个MergingPersistenceUnitManager,它将合并实体的类定义。

这是我的配置

<bean id="pum" class="org.springframework.data.jpa.support.MergingPersistenceUnitManager">
  <property name="persistenceXmlLocations">
    <list>
     <value>classpath*:META-INF/persistence.xml</value>
    </list> 
  </property>
  <property name="defaultDataSource" ref="dataSource"></property>
</bean>


<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="LineManagement" />
    <property name="persistenceUnitManager" ref="pum"></property>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="false" />
            <property name="showSql" value="false" />
            <property name="databasePlatform" ref="cpsHibernateDialectClassName" />
        </bean>
    </property>

哪个不起作用。它给了我一个错误          java.lang.NoSuchMethodError:org.springframework.data.jpa.support.MergingPersistenceUnitManager.getPersistenceUnitInfo(Ljava/lang/String;)Lorg/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo;

我不知道它是如何给我这个错误的。根据我的理解,MergingPersistenceUnitManager扩展了DefaultPersistenceManager。我唯一怀疑的是可能存在冲突。

这是我的依赖项。 spring-orm-3.0.2-RELEASE.jar和spring-data-jpa-1.0.3-RELEASE.jar。

我可以回到古老的编程解决方案,但它不应该只是开箱即用吗?

1 个答案:

答案 0 :(得分:1)

你有spring-orm和spring-data-jpa的不匹配版本。一般来说,任意版本都不能保证一起播放。

MutablePersistenceUnitInfo getPersistenceUnitInfo - 在版本orm 3.0.2版本的MergingPersistenceUnitManager(或实际来自它的超类DefaultPersistenceUnitManager)中没有方法。

从版本3.0.5中的同一个类,你可以找到这个方法:DefaultPersistenceUnitManager.java spring-data-jpa-1.0.3的maven pom列出了对spring-orm 3.0.5的依赖。所以使用sprin-orm 3.0.5版解决了您的问题。