Config Spring для работы с гибернацией и сущностями, отображаемыми аннотациями - PullRequest
2 голосов
/ 28 октября 2010

я использую hibernate, и я сопоставляю свои сущности с аннотациями (поэтому нет файлов xml).

Я наконец-то решил попробовать Spring Framework, но столкнулся с некоторыми проблемами, чтобы заставить его работать.

ВсеОбучающие программы, которые я нашел, очень разносторонние, и большинство из них используют файл XML для сопоставления сущности ... Можете ли вы помочь мне правильно написать файл конфигурации XML для Spring + Hibernate?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 28 октября 2010

Ниже приведен рабочий пример одного из моих приложений. Все они должны идти в applicationContext или в .xml, загруженном appContext.

Первый фрагмент - это конфигурация источника данных с использованием пула соединений:

<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}" />

Далее идёт бин Property. Если вы не уверены в какой-либо из этих настроек, обратитесь к соответствующим 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>

Теперь это интересная часть. Здесь вы соединяете все это вместе и сообщаете заводской сессии, где искать аннотированные классы (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>

Когда вы настроите свой проект следующим образом, Spring автоматически выполнит следующие преобразования @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 голос
/ 28 октября 2010

Если вы используете JPA (EntityManager), классы @Entity обнаруживаются автоматически.

Весной вы получаете EntityManager через LocalEntityManagerFactoryBean, а затем вводите @PersistenceContext в свойклассы. Проверьте здесь для получения дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...