2013-02-27 70 views
0

我已經閱讀了很多教程,用JPA配置spring。我使用的是本地MySQL數據庫和我有這個背景:Spring with JPA not persisting objects

<?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和工作良好,但是當我試圖堅持實體與此配置,我從來沒有在休眠記錄插入命令,但在測試的情況下,我看到它。如果我試圖做一個entitymanager.flush我得到一個異常,因爲任何事務正在運行。

我應該改變什麼可以堅持我的本地數據庫與此實體? 謝謝

+0

你能分享請你的堆棧跟蹤,看看錯誤是什麼?所以我們可以更好地分析它並幫助你。 – 2013-02-27 23:36:08

回答

1

如果我試圖做一個entitymanager.flush我得到一個異常,因爲任何事務正在運行。

如果我正在閱讀這個權利,問題是您正在嘗試保存某些內容而不開始交易。更改持久狀態時需要事務。

0

爲了能夠堅持數據庫,必須在事務中。所以你可以解決的更好的辦法是註釋@Transactional ...例如在方法上

這也讓我瘋狂了幾個小時前的幾個小時。

0

你在課堂上使用註釋嗎?如果是這樣,請確保你 <context:component-scan base-package="com.vitornobrega.myapp">,因爲從jpa配置我可以看到你注入你的依賴的地方。