Incorporamento hibernate mapping hbm.xml in vaso
-
20-09-2019 - |
Domanda
E 'possibile incorporare i mapping Hibernate hbm.xml di al barattolo e di evitare di riferimento manuale in applicationContext.xml come
<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
e puntarlo a un vaso / etc?
NHibernate ha una tale opzione per puntare a un assieme, da dove si prende alza la HBM.
Le annotazioni non sono un'opzione
Modifica Modificare: La mia intenzione è quella di rimuovere riferimento manuale per HBM di e puntare a una posizione generica da cui Hibernate può raccoglierlo
<list>
<value>
com/.../Question.hbm.xml
</value>
<value>com/.../Users.hbm.xml</value>
<value>
com/.../Answers.hbm.xml
</value>
Soluzione
Giusto per chiarire, così: si sta parlando specificatamente Spring e Hibernate insieme, poiché la configurazione si sta mostrando è la configurazione di primavera di Hibernate. Spring LocalSessionFactoryBean
accetta una moltitudine di diversi modi per impostare la posizione dei file di mapping Hibernate; si mostra solo con il parametro mappingResources
, ma c'è anche mappingLocations
, mappingJarLocations
, e mappingDirectoryLocations
.
mi piacerebbe pensare che, per il tuo esempio, si potrebbe desiderare di utilizzare mappingDirectoryLocations
e basta puntare a una directory specifica all'interno del vostro JAR, come ad esempio:
<property name="mappingDirectoryLocations">
<list>
<value>
com/…/domain/
</value>
</list>
</property>
Altri suggerimenti
Sì, è possibile, per impostazione predefinita Primavera va dal percorso classe quando ricerca di file di mapping. Quindi, se il vaso è sul percorso di classe, dovrebbe trovare i file non è un problema per i file di mapping Hibernate da includere nel vostro session bean fabbrica locale.
Così, se il file di mapping è in my.spring.package e si chiama mapping.xml, il percorso
my/spring/package/mapping.xml
dovrebbe funzionare bene.
Modifica
Grazie per il commento, aggiornerò la mia risposta.
No , non si può puntare ad un vaso ... ma YES , si può puntare a mappare i file nel vaso.
Io uso le mappingJarLocations attribuiscono questo modo di tirare in tutti i file * hbm.xml in un dato vaso:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="mappingJarLocations"> <list> <value>WEB-INF/lib/my-lib.jar</value> ...
AnnotationSessionFactoryBean gioca bello, con annotazioni e file di mapping, btw.
Edit: ho riletto alcuni di questi posti e voglio anche sottolineare che è possibile ridurre roba ripetitivo con la creazione di definizioni astratte fagiolo in questo modo:
<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"> ...
questo risolto il mio problema
<build> <sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
Si lavora per me:
<property name="mappingJarLocations">
<list>
<value>file:**/yourJarContainHbms.jar</value>
</list>
</property>