Verwenden des MergingPersistenceUnitManager zum Laden der Entität
-
15-11-2019 - |
Frage
Ich habe ein Projekt-Setup, in dem ich ein Modul habe, das im Ordner WEB-INF/lib der übergeordneten WAR-Datei vorhanden ist.Dieses Modul enthält eine persistence.xml und eine Entität, die geladen werden muss, wenn der JPA-Container während des Startvorgangs geladen wird.Irgendwie muss ich die Persistenzeinheiten des Krieges und des Lib-Jars zusammenführen.Die persistence.xml meines Krieges ist in WEB-INF/classes/META-INF vorhanden, daher würde sie WEB-INF/classes als Persistenzstamm verwenden und die Entität aus meinem Lib-JAR nicht verstehen.Das habe ich auf die harte Tour herausgefunden.
Ich bin auf mehrere Leute gestoßen, die Lösungen für dieses Problem vorgeschlagen haben
http://ancientprogramming.blogspot.com/2007/05/multiple-persistencexml-files-and.html Und ich habe auch herausgefunden, dass es das Data-jpa-Projekt von Spring gibt, das über einen MergingPersistenceUnitManager verfügt, der die Klassendefinitionen der Entitäten zusammenführt.
Hier ist meine Konfiguration
<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>
was nicht funktioniert.Es gibt mir einen Fehler java.lang.NoSuchMethodError:org.springframework.data.jpa.support.MergingPersistenceUnitManager.getPersistenceUnitInfo(Ljava/lang/String;)Lorg/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo;
Ich habe keine Ahnung, wie es zu diesem Fehler kommt.Nach meinem Verständnis erweitert der MergingPersistenceUnitManager den DefaultPersistenceManager.Ich vermute nur, dass es einen Konflikt geben könnte.
Hier sind meine Abhängigkeiten.spring-orm-3.0.2-RELEASE.jar und spring-data-jpa-1.0.3-RELEASE.jar.
Ich kann zur alten Programmierlösung zurückkehren, aber sollte es nicht einfach sofort funktionieren?
Lösung
Sie haben nicht übereinstimmende Versionen von spring-orm und spring-data-jpa.Im Allgemeinen kann nicht garantiert werden, dass beliebige Versionen gut zusammenspielen.
MutablePersistenceUnitInfo getPersistenceUnitInfo – Die Methode fehlt im MergingPersistenceUnitManager (oder eigentlich in seiner Oberklasse DefaultPersistenceUnitManager) in Version 3.0.2.
In derselben Klasse in Version 3.0.5 finden Sie diese Methode: DefaultPersistenceUnitManager.java Auch Maven Pom für spring-data-jpa-1.0.3 listet die Abhängigkeit von spring-orm 3.0.5 auf.Also Ihr Problem wird durch die Verwendung von Sprin-Orm Version 3.0.5 gelöst.