即時通訊使用休眠和我映射我的實體註釋(所以沒有XML文件)。配置春天休眠和實體映射的註釋
我終於決定嘗試彈簧框架,但我遇到了一些問題,使其工作。
我發現的所有教程都很分散,其中大多數使用xml文件來映射實體... 你能幫我正確地編寫一個xml配置文件,用於spring + hibernate嗎?
謝謝。
即時通訊使用休眠和我映射我的實體註釋(所以沒有XML文件)。配置春天休眠和實體映射的註釋
我終於決定嘗試彈簧框架,但我遇到了一些問題,使其工作。
我發現的所有教程都很分散,其中大多數使用xml文件來映射實體... 你能幫我正確地編寫一個xml配置文件,用於spring + hibernate嗎?
謝謝。
以下是我的一個應用程序的示例。 它們都應該放在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 {
.
.
.
}
如果您還有其他問題,請告訴我。
問候
如果您使用JPA(EntityManager
),則會自動發現@Entity
類。
在春季,您通過LocalEntityManagerFactoryBean
獲得EntityManager
,然後將@PersistenceContext
注入您的課程。 Check here瞭解更多信息
+1,因爲你需要比Bozho更:) – willcodejavaforfood 2010-10-28 12:21:19
非常感謝你!我有一個關於dataSource的問題,你選擇「com.mchange.v2.c3p0.ComboPooledDataSource」,但在另一個例子中,我看到其他數據源類,如「org.springframework.jdbc.datasource.DriverManagerDataSource」。 它是如何選擇的? 再次感謝。 – blow 2010-10-28 17:05:35
簡單:看看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