2010-10-28 125 views
2

即時通訊使用休眠和我映射我的實體註釋(所以沒有XML文件)。配置春天休眠和實體映射的註釋

我終於決定嘗試彈簧框架,但我遇到了一些問題,使其工作。

我發現的所有教程都很分散,其中大多數使用xml文件來映射實體... 你能幫我正確地編寫一個xml配置文件,用於spring + hibernate嗎?

謝謝。

回答

7

以下是我的一個應用程序的示例。 它們都應該放在applicationContext或appContext加載的.xml中。

第一個代碼段是數據源的結構中,使用連接池:

<bean id="dataSource" 
    class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" 
    p:driverClass="${jdbc.driverClassName}" 
    p:jdbcUrl="${jdbc.url}" 
    p:user="${jdbc.username}" 
    p:password="${jdbc.password}" /> 

接下來是一個屬性豆。如果您不確定任何這些設置,請參閱相應的API。

<bean id="hibernateProps" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="properties"> 
     <props> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
      <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
      <prop key="hibernate.show_sql">false</prop> 
      <prop key="hibernate.c3p0.minPoolSize">5</prop> 
      <prop key="hibernate.c3p0.maxPoolSize">20</prop> 
      <prop key="hibernate.c3p0.idleTestPeriod">300</prop> 
      <prop key="hibernate.c3p0.timeout">600</prop> 
      <prop key="hibernate.c3p0.max_statement">50</prop> 
      <prop key="hibernate.c3p0.testConnectionOnCheckout">false</prop> 
      <prop key="hibernate.c3p0.preferredTestQuery">select 1;</prop> 
     </props> 
    </property> 
</bean> 

現在這是一個有趣的部分。在這裏你把它連接在一起,並告訴sessionfactory在哪裏尋找註釋類(packagesToScan)。

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 
     p:dataSource-ref="dataSource" 
     p:packagesToScan="your.package.path" 
     p:hibernateProperties-ref="hibernateProps" /> 

爲了使這個例子工作,你應該使用下面的依賴關係(給出的Maven):

<dependency> 
     <groupId>javax.persistence</groupId> 
     <artifactId>persistence-api</artifactId> 
     <version>1.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>3.0.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>3.0.2.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate</artifactId> 
     <version>3.2.7.ga</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-annotations</artifactId> 
     <version>3.3.0.ga</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>3.3.0.ga</version> 
    </dependency> 

    <dependency> 
     <groupId>c3p0</groupId> 
     <artifactId>c3p0</artifactId> 
     <version>0.9.1</version> 
    </dependency> 

當你設置你的項目是這樣,下面@Entity映射彈簧管理自動:

package your.package.path; 

import java.io.Serializable; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.persistence.Transient; 

@Entity 
@Table(name = "table_name") 
public class DomainObject implements Serializable { 

. 
. 
. 
} 

如果您還有其他問題,請告訴我。

問候

+1

+1,因爲你需要比Bozho更:) – willcodejavaforfood 2010-10-28 12:21:19

+0

非常感謝你!我有一個關於dataSource的問題,你選擇「com.mchange.v2.c3p0.ComboPooledDataSource」,但在另一個例子中,我看到其他數據源類,如「org.springframework.jdbc.datasource.DriverManagerDataSource」。 它是如何選擇的? 再次感謝。 – blow 2010-10-28 17:05:35

+0

簡單:看看API:p http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/datasource/DriverManagerDataSource.html 「注意:這個類不是一個實際的連接池;它實際上並不連接連接。「 因此,如果您想在應用程序中使用c3p0,請選擇c3p0。 – chzbrgla 2010-10-28 20:37:48

1

如果您使用JPA(EntityManager),則會自動發現@Entity類。

在春季,您通過LocalEntityManagerFactoryBean獲得EntityManager,然後將@PersistenceContext注入您的課程。 Check here瞭解更多信息