我有一个项目设置,其中有一个模块,该模块位于父 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。
我可以回到古老的编程解决方案,但它不应该开箱即用吗?