2012-02-13 166 views
10

有沒有什麼方法可以按範圍定義hibernate.cfg.xml中的對象,而不是一個接一個?Hibernate + Spring MVC:對象映射配置

例如,Spring,你可以通過這樣的註釋定義所有的控制器:

<context:component-scan base-package="crm.controller" /> 

我能否以同樣的方式定義Hibernate類?或者它必須一個接一個地定義?

感謝您使用

+0

相關的問題: http://stackoverflow.com/q/1413190/211197 http://stackoverflow.com/q/2419802/211197 – maksimov 2012-04-06 14:20:21

回答

1

如果您使用的是Spring MVC,則可以在設置sessionFactory時對其進行配置。如果您正在使用HBM文件:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="mappingResources"> 
     <list> 
      <value>file1.hbm.xml</value> 
      <value>file2.hbm.xml</value> 
     </list> 
    </property> 
    <property name="hibernateProperties" ref="hibernateProperties"/> 
</bean> 

如果您使用的註釋類:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.me.domain"> 
    <property name="hibernateProperties" ref="hibernateProperties"/> 
</bean> 
0

嘗試:

<mapping package="com.mycompany.model" /> 

,而不是一組元素:

<mapping class="com.mycompany.model.EntytyOne" /> 
<mapping class="com.mycompany.model.EntytyTwo" /> 
+0

我 – nKognito 2012-02-13 14:48:19

+0

不工作,你能否提供更多細節?你在日誌中遇到任何錯誤?你可以在這裏粘貼它們嗎? – 2012-02-13 22:50:29

+0

當我使用映射包時,它給我實體找不到錯誤 – nKognito 2012-02-14 03:58:58

0

你爲什麼不試試這個。我已經在這個springDAOcontext.xml

配置
<bean id="csiSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="configLocation"> 
     <value>classpath:hibernate/hibernate.cfg.xml</value> 
    </property> 
    <property name="dataSource" ref="DataSource"/> 

    <property name="mappingResources"> 
     <list> 
      <value>hibernate/*</value> 
        </list> 
        <property> 
0

據我記得,休眠,因爲它是外的箱子,不支持「包sanning」發現你的域類。但是考慮到您將Hibernate與Spring MVC集成在一起,您可以在您的Spring上下文配置文件中註釋您的類(標準JPA + Hibernate特定註釋)並指定包含Hibernate實體類的包。以下是我在以前的項目配置的:

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="org.springmvc.domain" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
      <prop key="show_sql">true</prop> 
      <prop key="log_level">DEBUG</prop> 
     </props> 
    </property> 
</bean> 

的「packagesToScan」屬性定義春天將有Hibernate的掃描,以發現實體類的包。

0

IM使用JPA註解@實體,applicationContext.xml中的代碼是:

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.yourcompany.module" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
     </props> 
    </property> 
</bean> 

包路徑「com.yourcompany.module」是您的java實體包,例如:

package com.yourcompany.module; 
@Entity 
class MyEntity{ 
    private Long id; 
    set get... 
}