我可以使用DispatcherServlet Context中声明的Hibernate Session Factory而不是hibernate.cfg.xml吗?

时间:2012-09-05 10:16:07

标签: java spring hibernate spring-mvc intellij-idea

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

在我的新项目中,我想基本上使用Hibernate。我已经从我的数据库结构生成了实体类。但是在IDEA DAO类中还没有生成,为什么呢?我能以某种方式在IDEA中生成DAO类吗?在生成此POJO期间,我在DispatcherSerlvet Context文件中创建了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文件中。我已从spring配置文件中删除了会话工厂定义和Transaction Manager定义。我的数据库中的简单持久对象正常工作。那么也许这是使用Spring MVC和Hibernate的最短路径?但是Transaction Manager呢?这是否需要其他操作或操作?

1 个答案:

答案 0 :(得分:4)

  

我没有创建hibernate.cfg.xml文件,因为我有   在我的Spring DispatcherServlet中声明了Hibernate Session Factory   我和Context文件声明了persistence.xml文件。

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

  

在我的新项目中,我想基本上使用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">