2012-03-01 62 views
2

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

我在多个人提出解决办法跌跌撞撞这个问题

http://ancientprogramming.blogspot.com/2007/05/multiple-persistencexml-files-and.html 而且我还发现,有春天的具有MergingPersistenceUnitManager将合并实体的类定义数据JPA项目。

这里是我的配置

<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

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

MutablePersistenceUnitInfo getPersistenceUnitInfo - 方法是从MergingPersistenceUnitManager不存在(或实际上是从它的超DefaultPersistenceUnitManager)版本ORM 3.0.2版。

从版本3.0.5中的相同类可以找到此方法:DefaultPersistenceUnitManager.java另外maven pom for spring-data-jpa-1.0.3列出了对spring-orm 3.0.5的依赖关系。所以你的问题是通过使用sprin-orm 3.0.5版来解决的。

+0

优秀,谢谢米克。我感到很蠢,以前没有检查过。 – Hrishikesh 2012-03-01 21:53:58