Intégrer mise en veille prolongée mappings hbm.xml dans pot
-
20-09-2019 - |
Question
Est-il possible d'intégrer les hbm.xml mapping hibernate de la jarre et éviter manuel de référence dans applicationContext.xml comme
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>
com/…/domain/Question.hbm.xml
et pointer vers un pot / etc?
NHibernate a une telle option pour pointer vers un ensemble, d'où il prend ups. HBM est le
Les annotations ne sont pas une option
Edit: Modifier: Mon intention est de supprimer la référence manuelle pour HBM et pointer vers un emplacement générique où veille prolongée peut le ramasser
<list>
<value>
com/.../Question.hbm.xml
</value>
<value>com/.../Users.hbm.xml</value>
<value>
com/.../Answers.hbm.xml
</value>
La solution
Juste pour clarifier, ainsi vous parlez précisément Spring et Hibernate ensemble, puisque la configuration vous montrant est la configuration de printemps Mise en veille prolongée. Spring paramètre de mappingResources
, mais il y a aussi mappingLocations
, mappingJarLocations
et mappingDirectoryLocations
.
Je pense que votre exemple, vous pouvez utiliser mappingDirectoryLocations
et juste pointer à un répertoire spécifique dans votre JAR, tels que:
<property name="mappingDirectoryLocations">
<list>
<value>
com/…/domain/
</value>
</list>
</property>
Autres conseils
Oui, vous pouvez, par défaut Spring va du chemin de classe lorsque la recherche de fichiers de mappage. Donc, si le pot est sur votre chemin de classe, il doit trouver les fichiers sans problème pour les fichiers de mappage de mise en veille prolongée à inclure dans votre bean usine de session locale.
Donc, si votre fichier de mappage est en my.spring.package et est appelé mapping.xml, le chemin
my/spring/package/mapping.xml
devrait fonctionner très bien.
EDIT
Merci pour le commentaire, je vais mettre à jour ma réponse.
NON , vous ne pouvez pas pointer un pot ... mais YES , vous pouvez pointer vers la cartographie des fichiers dans le pot.
J'utilise les attributs mappingJarLocations comme pour ainsi tirer dans tous les fichiers * hbm.xml dans un bocal donné:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="mappingJarLocations"> <list> <value>WEB-INF/lib/my-lib.jar</value> ...
AnnotationSessionFactoryBean joue bien avec les annotations et les fichiers de mappage, btw.
Edit: Je relis certains de ces postes et je tiens également à souligner que vous pouvez réduire des choses répétitives en créant des définitions abstraites de haricots comme ceci:
<bean id="annotatedClassList" abstract="true"> <property name="packagesToScan"> <list> <value>com.foo.*.*</value> <value>com.foo.*.*.*</value> <value>com.foo.*.*.*.*</value> </list> </property> </bean> <bean id="writingSessionFactory" parent="annotatedClassList" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="mappingJarLocations"> ... <bean id="readingSessionFactory" parent="annotatedClassList" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="mappingJarLocations"> ...
résolu mon problème
<build> <sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
Il fonctionne pour moi:
<property name="mappingJarLocations">
<list>
<value>file:**/yourJarContainHbms.jar</value>
</list>
</property>