Wir arbeiten mit JPA und versuchen, die Standardspezifikationen einzuhalten (und Hibernate-spezifische Funktionen zu vermeiden).Wir verweisen auf die artifactId eines maven-Abhängigkeits-jars aus persistence.xml
Wir verwenden ein Projekt (nennen wir es X) in einem anderen Projekt (A) als Maven-Abhängigkeit.
Wir JPA brauchen Projekt X für Entities sowie Scan-Projekt A.
Zu diesem Zweck zu scannen, haben wir eine Linie
<jar-file>lib/X-v5-4.0.jar</jar-file>
innen
<persistence-unit>
hinzugefügt persistence.xml. Das funktioniert gut.
Das Problem, das wir noch haben, ist, dass wir nun die Version von Projekt X nicht nur in pom.xml, sondern auch in persistence.xml angeben müssen. Dies ist ein Rezept für Probleme mit zukünftigen Deployen.
Wir haben mit einem System mit Maven Ressource Filterung kommen:
<jar-file>lib/X-v5-${x-version}.jar</jar-file>
in persistence.xml und
<properties>
<x-version>4.0</x-version>
</properties>
und $ {x-version} in pom.xml.
Dies funktioniert, ist aber immer noch nicht perfekt, da wir daran denken müssen, die Versionsnummer jedes Mal, wenn Projekt X eine neue Version erhält, an einem anderen Ort zu speichern.
Idealerweise möchten wir eine Situation haben, in der Versionsinformationen im Abhängigkeitsteil von pom.xml angepasst werden können und Änderungen automatisch in persistence.xml übernommen werden. Wir würden auf diese Weise viele mögliche Fehler in zukünftigen Deployments reduzieren.
Ist das möglich?
EDIT (UNSERE LÖSUNG):
haben wir eine Datei mit dem Namen jpa.xml hinzugefügt. Wir definieren eine entityManagerFactory, einen persistenceAnnotationBeanPostProcessor und einen transactionManager. Der wichtige Teil ist die EntityManagerFactory-Bean. Es verfügt über eine Eigenschaft "packagesToScan", mit der Sie bestimmte Pakete angeben können, die nach Entitäten durchsucht werden sollen, die in den Persistenzkontext eingefügt werden sollen.
Ein Code-Schnipsel:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="jpaDataSource" />
<property name="loadTimeWeaver">
<bean
class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
<property name="packagesToScan">
<list>
<value>org.com.our.external.library.package1</value>
<value>org.com.our.external.library.package2</value>
<value>org.com.our.external.library.package3</value>
</list>
</property>
</bean>
Ich bin sicher, dass Sie den Vorteil sehen: wie wir auf diese Bibliotheken von Paketsignaturen beziehen wir nicht mehr über jar Versionsnummern kümmern.
Ich habe mit meinem Projekt in die gleiche Situation führen. Haben Sie jemals eine gute Lösung für dieses Problem gefunden? –
@EricB. Ich habe die Lösung als Bearbeitung zu meiner Frage hinzugefügt. Ich hoffe das hilft. – Zaan
Danke. Ich habe am Ende dasselbe benutzt, mit dem Vorbehalt, dass es kein JPA-Standard ist. Aber ich habe die JPA-Standardlösung aufgegeben. Ich habe ein Plugin mit dem Namen 'jpa-maven-plugin' (http://ljnelson.github.io/jpa-maven-plugin/) gefunden, mit dem Sie die Datei persistence.xml während eines Maven-Builds aktualisieren können. –