在我之前的 Spring MVC 项目中,我使用 Hibernate 作为 JPA 的提供者。我不必创建 hibernate.cfg.xml
文件,因为我已经在我的 Spring DispatcherServlet Context 文件中声明了 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
文件中。我已经从 spring 配置文件中删除了 session 工厂定义和 Transaction Manager
定义。我的数据库中的简单持久对象工作正常。那么也许这是使用 Spring MVC 和 Hibernate 的最短方式?但是 Transaction Manager
呢?这是其他操作或 Action 所需要的吗?
最佳答案
I didn't have to create hibernate.cfg.xml file because I have declared Hibernate Session Factory in my Spring DispatcherServlet Context file and I have declared persistence.xml file.
AFAIK 在使用 JPA 时我们需要在 Spring 配置文件中定义 entityManagerFactory
并且 JPA 实现由 jpaVendorAdapter
属性决定。 persistence.xml
用于定义持久性单元。 JPA 不需要 hibernate.cfg.xml
。
In my new project I would like to use Hibernate basically.
如果你想直接使用hibernate,你需要在spring配置文件或hibernate.cfg.xml文件中定义 session 工厂
<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">
关于java - 我可以使用在 DispatcherServlet 上下文中声明的 Hibernate session 工厂而不是 hibernate.cfg.xml 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12279199/