在我以前的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
呢?这是否需要其他操作或操作?
答案 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">