spring + hibernate映射类没有xml

问题描述:

在我的applicationContext.xml中,这是我如何将xml映射到POJO。如何将目录映射到类文件而不需要创建xml?spring + hibernate映射类没有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> 

而且你还可以通过转换

<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注释的所有类将被自动拾取。

+0

我应该在我的AnnotationSessionFactoryBean中将类映射转换为什么? – 2016-12-04 05:21:05

+0

@嘉亚洲你能否详细说明一下,我不太清楚你在问什么。 – 2016-12-05 14:28:38

+0

如果在我的一个实体中,我添加了一个OneToOne映射到另一个实体的属性。我应该在Spring框架xml配置中添加什么来实现它?你可以在这里查看我的问题的细节:http://*.com/questions/40956208/how-to-configure-hibernate-onetoone-mapping-using-spring-framework – 2016-12-06 15:08:33

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

像往常一样,你需要在Hibernate配置文件(通常hibernate.cfg.xml)中声明你的持久化类,虽然你使用<mapping>元素来声明你的持久化类:

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

如果您正在使用Spring框架,你可以建立一个基于注释的Hibernate会话工厂使用AnnotationSessionFactoryBean类,如下所示:

<!-- 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> 
+0

你的bean声明应该放在DispatcherServlet上下文中吗?或者在另一个Spring Framework配置文件中?还有,当我在hibernate.cfg.xml中声明了持久化类时)我是否还应该在Spring Security中设置基于批注的Hibernate会话工厂? – woyaru 2012-07-05 13:52:38

您可以在您的类上使用注释,但对于Hibernate我不确定是否有内置内容(用于Spring)。 This thread应该有助于避免更多技术,但是您也可以使用Java Persistence Annotation(JPA)与Hibernate一起实现相同的目标。

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

@Pascal Thivent给你想要做的事提供了一个非常好的开始。对于每个实体类,您需要对它们进行注释。这是annotations in Hibernate expalin的文档。

例如从文档:

@Entity 
    public class Flight implements Serializable { 
    Long id; 

    @Id 
    public Long getId() { return id; } 

    public void setId(Long id) { this.id = id; } 
    } 

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