3

在我之前的 Spring MVC 项目中,我使用 Hibernate 作为 JPA 的提供者。我不必创建hibernate.cfg.xml文件,因为我已经在我的 Spring DispatcherServlet 上下文文件中声明了 Hibernate Session Factory 并且我已经声明了persistence.xml文件。

在我的新项目中,我基本上想使用 Hibernate。我已经从我的数据库结构中生成了实体类。但是在 IDEA DAO 中没有生成类,为什么?我可以以某种方式在 IDEA 中生成 DAO 类吗?在生成这个 POJO 期间,我还在 DispatcherSerlvet 上下文文件中创建了 Hibernate Session Factory 的实体类。

我创建了自己的简单 DAO 类来检查数据库中的持久类。但是出现了这个错误:

Error in creating SessionFactory object./hibernate.cfg.xml not found

所以我假设我必须创建hibernate.cfg.xml. 如果是的话,我是否必须在我的 DispatcherServlet 上下文文件中保留 Hibernate Session Factory 声明?

编辑

<!-- Hibernate session factory -->
<beans:bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

    <beans:property name="dataSource">
        <beans:ref bean="dataSource" />
    </beans:property>

    <beans:property name="hibernateProperties">
        <beans:props>
            <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</beans:prop>
            <beans:prop key="hibernate.show_sql">true</beans:prop>
            <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
            <beans:prop key="hibernate.connection.url">jdbc:mysql://localhost/finances</beans:prop>
            <beans:prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</beans:prop>
            <beans:prop key="hibernate.connection.username">root</beans:prop>
            <beans:prop key="hibernate.connection.password">root</beans:prop>
        </beans:props>
    </beans:property>

    <beans:property name="annotatedClasses">
        <beans:list>
            <beans:value>my.package.FirstClass</beans:value>
            <beans:value>my.package.SecondClass</beans:value>
        </beans:list>
    </beans:property>
</beans:bean>
<!-- Hibernate session factory end -->

<beans:bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <beans:property name="sessionFactory" ref="sessionFactory" />
</beans:bean>

编辑#2

我已将带注释的类和连接定义移动到hibernate.cfg.xml文件中。我已经删除了会话工厂定义以及Transaction Managerspring 配置文件中的定义。我在我的数据库中的简单持久对象工作正常。那么也许这是使用 Spring MVC 和 Hibernate 的最短方法?但是呢Transaction Manager?这是其他操作或操作所要求的吗?

4

1 回答 1

4

我不必创建 hibernate.cfg.xml 文件,因为我已经在 Spring DispatcherServlet Context 文件中声明了 Hibernate Session Factory,并且我已经声明了 persistence.xml 文件。

AFAIK 使用 JPA 时,我们需要entityManagerFactory在 Spring 配置文件中定义,JPA 实现由jpaVendorAdapter属性决定。persistence.xml用于定义持久性单元。hibernate.cfg.xmlJPA 不需要。

在我的新项目中,我基本上想使用 Hibernate。

如果要直接使用hibernate,则需要在spring配置文件或hibernate.cfg.xml文件中定义会话工厂,如

<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.
    annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="myDataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.foo.Bar</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect"> org.hibernate.dialect.HSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
            </props>
        </property>
    </bean>

您正在混合 JPA 和 Hibernate 配置。
以下链接可能会帮助您避免一些混淆
Spring + Hibernate
Spring + JPA (with Hibernate implementation)


编辑:使用AnnotationSessionFactoryBean注释来定义映射

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
于 2012-09-05T10:44:48.153 回答