2009-10-31 75 views
9

在我的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> 

回答

23

而且你還可以通過轉換

<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://stackoverflow.com/questions/40956208/how-to-configure-hibernate-onetoone-mapping-using-spring-framework – 2016-12-06 15:08:33

17

而不是使用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

5

您可以在您的類上使用註釋,但對於Hibernate我不確定是否有內置內容(用於Spring)。 This thread應該有助於避免更多技術,但是您也可以使用Java Persistence Annotation(JPA)與Hibernate一起實現相同的目標。

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

3

@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提到的,你應該得到你需要的一切。