【问题标题】:spring+hibernate mapping class without xml没有xml的spring+hibernate映射类
【发布时间】:2010-12-11 21:16:30
【问题描述】:

在我的 applicationContext.xml 中,这就是我将 xml 映射到 POJO 的方式。如何将目录映射到类文件而不需要创建xml?

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
            <list>
                <value>com/custompackage/custom/spi/hibernate3/HibernateCurrentStep.hbm.xml</value>
                <value>com/custompackage/custom/spi/hibernate3/HibernateHistoryStep.hbm.xml</value>
                 <value>com/custompackage/custom/spi/hibernate3/HibernatecustomEntry.hbm.xml</value>
                  <value>user/custom/hibernate3/PropertySetItemImpl.hbm.xml</value>
                   <value>com/custompackage/user/provider/hibernate3/user/impl/HibernateGroupImpl.hbm.xml</value>
                   <value>com/custompackage/user/provider/hibernate3/user/impl/HibernateUserImpl.hbm.xml</value>
            </list>
        </property>


        <property name="hibernateProperties">
            .....
        </property>
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>

    </bean>

【问题讨论】:

    标签: java hibernate spring orm


    【解决方案1】:

    您可以使用基于 Java 5 注释的 Hibernate Annotations 库,而不是使用 XML 映射文件。

    像往常一样,您需要在 Hibernate 配置文件(通常为 hibernate.cfg.xml)中声明您的持久性类,尽管您使用 &lt;mapping&gt; 元素来声明您的持久性类:

        <hibernate-configuration>
          <session-factory>
            <mapping class="com.mycompany.sample.domain.Order"/>
            <mapping class="com.mycompany.sample.domain.LineItem"/>
          </session-factory>
        </hibernate-configuration>
    

    如果您使用的是 Spring 框架,则可以使用 AnnotationSessionFactoryBean 类设置基于注解的 Hibernate 会话工厂,如下所示:

      <!-- Hibernate session factory -->
      <bean id="sessionFactory" 
            class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
       <property name="dataSource">
         <ref bean="dataSource"/>
       </property>
       <property name="hibernateProperties">
         <props>
           <prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop>
           <prop key="hibernate.hbm2ddl.auto">create</prop>
           ...
         </props>
       </property>
       <property name="annotatedClasses">
         <list>
           <value>com.mycompany.sample.domain.Order</value>
           <value>com.mycompany.sample.domain.LineItem</value>
           ...
         </list>
       </property>
     </bean>
    

    【讨论】:

    • 你的bean声明应该放在DispatcherServlet Context中?或者在另一个 Spring Framework 配置文件中?而且当我在 hibernate.cfg.xml 中声明了我的持久性类时,我是否还应该在 Spring Security 中设置一个基于注释的 Hibernate 会话工厂?
    【解决方案2】:

    你可以在你的类上使用注解,但对于 Hibernate,我不确定是否有内置的东西(在 Spring 中使用)。如果您想避免更多技术,This thread 应该会有所帮助,但您也可以将 Java Persistence Annotations (JPA) 与 Hibernate 结合使用来实现相同的目标。

    Here's 一个很好的使用 JPA + Hibernate + Spring 的教程。

    【讨论】:

      【解决方案3】:

      @Pascal Thivent 为您想要做的事情提供了一个很好的开端。对于每个实体类,您都需要对其进行注释。这是解释annotations in Hibernate 的文档。

      例如来自文档:

         @Entity
        public class Flight implements Serializable {
          Long id;
      
          @Id
          public Long getId() { return id; }
      
          public void setId(Long id) { this.id = id; }
        }
      

      所以除了@Pascal Thivent 提到的,你应该得到你需要的一切。

      【讨论】:

        【解决方案4】:

        你可以通过转换进一步简化事情

        <property name="annotatedClasses">
             <list>
               <value>com.mycompany.sample.domain.Order</value>
               <value>com.mycompany.sample.domain.LineItem</value>
               ...
             </list>
         </property>
        

        <property name="packagesToScan" value="com.mycompany.sample.domain" />
        

        在您的AnnotationSessionFactoryBean 中,所以现在com.mycompany.sample.domain 包中所有用@Entity 注释的类都将被自动拾取。

        【讨论】:

        • 我应该在 AnnotationSessionFactoryBean 中将类映射转换为什么?
        • @JiayiZhou 你能详细说明一下吗,我不太明白你在问什么。
        • 如果在我的一个实体中,我添加一个 OneToOne 映射到另一个实体的属性。我应该在 spring 框架 xml 配置中添加什么才能使其工作?您可以在这里查看我的问题的详细信息:stackoverflow.com/questions/40956208/…
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 2016-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多