是否可以将Hibernate映射HBM.XML嵌入罐子中,并避免使用ApplicationContext.xml中的手动参考

  <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

并将其指向罐子/等?
NHIBERNATE可以选择指向一个组件,从那里拾取了HBM。
注释不是一个选择

编辑:编辑:我的目的是删除对HBM的手动引用,并指向Hibernate可以接收的通用位置

  <list>
    <value>
      com/.../Question.hbm.xml
    </value>
    <value>com/.../Users.hbm.xml</value>
    <value>
      com/.../Answers.hbm.xml
    </value>
有帮助吗?

解决方案

也只是为了澄清:您正在专门谈论春季和冬眠,因为您显示的配置是春季的Hibernate配置。春天的 LocalSessionFactoryBean 接受多种不同的方式来设置冬眠映射文件的位置;您只使用 mappingResources 参数,但也有 mappingLocations, mappingJarLocations, , 和 mappingDirectoryLocations.

我认为以您的例子,您可能要使用 mappingDirectoryLocations 只需将其指向您的罐子内的特定目录,例如:

<property name="mappingDirectoryLocations">
      <list>
        <value>
          com/…/domain/
        </value>
      </list>
</property>

其他提示

是的,默认情况下,当搜索映射文件时,默认情况下从类路径开始。因此,如果JAR在您的类路径上,则应发现将Hibernate映射文件包含在您本地的Session Factory Bean中的文件没有问题。

因此,如果您的映射文件在my.spring.package中,则称为映射。

my/spring/package/mapping.xml

应该工作正常。

编辑

感谢您的评论,我将更新答案。

, ,你不能指着一个罐子...但是 是的, ,您可能指出jar中的文件。

我使用MappingJarlocations属性,以便在给定的JAR中汲取所有 *HBM.XML文件:

<bean id="sessionFactory"
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="mappingJarLocations">
        <list>
            <value>WEB-INF/lib/my-lib.jar</value>
            ...

AnnotationsFactoryBean在注释和映射文件中很好地播放,顺便说一句。

编辑:我重新阅读了其中一些帖子,我还想指出,您可以通过创建抽象的bean定义来减少重复性内容:

<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">
    ...

这解决了我的问题

 <build>   <sourceDirectory>src/main/java</sourceDirectory>  
<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.xml</include>
        </includes>
    </resource>
</resources>

这个对我有用:

<property name="mappingJarLocations">
    <list>
        <value>file:**/yourJarContainHbms.jar</value>
    </list>
</property>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top