我已经阅读了许多教程,用JPA配置spring。我正在使用本地MySQL数据库,我有这样的背景:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- DataSource Setup -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="vitornobrega" />
<property name="password" value="" />
</bean>
<!-- Entity Manager Factory -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.vitornobrega.myapp.entities" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
</bean>
</property>
</bean>
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
</beans>
我对JUnit进行了测试以测试我的DAO并且运行良好但是当我尝试使用此配置持久化实体时,我从来没有在hibernate中记录insert命令,但在测试用例中我看到了它。如果我尝试创建entitymanager.flush,我会收到异常,因为任何事务都在运行。
我应该改变什么可以使用这些实体在我的本地数据库中保留? 感谢
答案 0 :(得分:1)
如果我尝试创建entitymanager.flush,我会收到异常,因为任何事务都在运行。
如果我正确地阅读,那么问题是你在没有开始交易的情况下试图保存一些东西。更改持久状态时需要事务处理。
答案 1 :(得分:0)
为了能够在数据库中持久化,必须在事务中。因此,您可以更好地解决它是注释@Transactional ...例如关于方法
这也让我在前几个小时疯了。
答案 2 :(得分:0)
<context:component-scan base-package="com.vitornobrega.myapp">
,因为从jpa配置中我可以看到你注入依赖项的位置。