2009-12-06 52 views
2

在我的DAO實現我做Stripersist.getEntityManager().persist(client);,這似乎並不返回任何錯誤,但我不能發現它仍然存在的數據。.persist()不返回錯誤,但我的持久數據在哪裏?

我的客戶對象是這樣的:

@Entity 
public class Client implements Serializable 
{ 

    @Id 
    @GeneratedValue 
    private Integer id; 
    @Column 
    private String name; 

    //accessors etc here 
... 
} 

我有一個持久性單元,是如下

<persistence-unit name="stripes" transaction-type="RESOURCE_LOCAL"> 
     <!-- Tell JPA to use Hibernate --> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <!--Hibernate settings --> 
     <properties> 
     <!--Autodetect entity classes --> 
      <property name="hibernate.archive.autodetection" value="class"/> 
     <!--Automatically create the SQL schema --> 
      <property name="hibernate.hbm2ddl.auto" value="create"/> 
     <!--Tell Hibernate to use HSQLDB --> 
      <property name="hibernate.dialect" 
     value="org.hibernate.dialect.DerbyDialect" /> 
      <property name="hibernate.connection.driver_class" 
     value="org.apache.derby.jdbc.ClientDriver" /> 
     <!--Configure the JDBC database connection--> 
      <property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/salestracker" /> 
      <property name="hibernate.connection.username" value="admin"/> 
      <property name="hibernate.connection.password" value="admin"/> 
      <property name="jdbc.batch_size" value="0"/> 
     <!--Configure the connection pool--> 
      <property name="hibernate.c3p0.min_size" value="5"/> 
      <property name="hibernate.c3p0.max_size" value="20"/> 
      <property name="hibernate.c3p0.timeout" value="300"/> 
      <property name="hibernate.c3p0.max_statements" value="50"/> 
      <property name="hibernate.c3p0.idle_test_period" value="3000"/> 
     </properties> 
    </persistence-unit> 

就像我說的,我已經設置斷點上.persist(client);,客戶端有name集,併爲id(否則我會用.merge())具有null,所以我不知道,爲什麼數據不保留?

如果我看看錶,CLIENT,它有0行。

SELECT * FROM ADMIN.CLIENT 

Executed successfully in 0.001 s. 
Line 1, column 1 

Execution finished after 0.001 s, 0 error(s) occurred. 

是否有可能實體被持久化,但事務沒有被提交?

感謝

編輯:下面是一些記錄信息

INFO: 09:24:32,002 DEBUG JpaTransactionManager:285 - Found thread-bound EntityManager [[email protected]] for JPA transaction 
INFO: 09:24:32,002 DEBUG JpaTransactionManager:371 - Creating new transaction with name [com.jameselsey.salestracker.service.ClientService.persistClient]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 
INFO: 09:24:32,002 DEBUG JDBCTransaction:82 - begin 
INFO: 09:24:32,003 DEBUG ConnectionManager:444 - opening JDBC connection 
INFO: 09:24:32,003 DEBUG JDBCTransaction:87 - current autocommit status: true 
INFO: 09:24:32,003 DEBUG JDBCTransaction:90 - disabling autocommit 
INFO: break 
INFO: 09:24:40,960 DEBUG SessionImpl:247 - opened session at timestamp: 12600914809 
INFO: 09:24:40,961 DEBUG JDBCTransaction:82 - begin 
INFO: 09:24:40,962 DEBUG ConnectionManager:444 - opening JDBC connection 
INFO: 09:24:40,965 DEBUG JDBCTransaction:87 - current autocommit status: true 
INFO: 09:24:40,966 DEBUG JDBCTransaction:90 - disabling autocommit 
INFO: 09:24:40,993 DEBUG AbstractBatcher:585 - opening JDBC connection 
INFO: 09:24:40,993 DEBUG DriverManagerConnectionProvider:132 - opening new JDBC connection 
INFO: 09:24:40,996 DEBUG DriverManagerConnectionProvider:138 - created connection to: jdbc:derby://localhost:1527/salestracker, Isolation Level: 2 
INFO: 09:24:40,997 DEBUG SQL:111 - select next_hi from hibernate_unique_key for read only with rs 
INFO: 09:24:41,001 DEBUG SQL:111 - update hibernate_unique_key set next_hi = ? where next_hi = ? 
INFO: 09:24:41,006 DEBUG AbstractBatcher:606 - closing JDBC connection (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0) 
INFO: 09:24:41,007 DEBUG TableHiLoGenerator:87 - new hi value: 0 
INFO: 09:24:41,007 DEBUG AbstractSaveEventListener:135 - generated identifier: 1, using strategy: org.hibernate.id.TableHiLoGenerator 
INFO: 09:24:41,036 DEBUG JpaTransactionManager:730 - Initiating transaction commit 
INFO: 09:24:41,037 DEBUG JpaTransactionManager:451 - Committing JPA transaction on EntityManager [[email protected]] 
INFO: 09:24:41,037 DEBUG JDBCTransaction:134 - commit 
INFO: 09:24:41,038 DEBUG JDBCTransaction:227 - re-enabling autocommit 
INFO: 09:24:41,038 DEBUG JDBCTransaction:147 - committed JDBC Connection 
INFO: 09:24:41,039 DEBUG ConnectionManager:427 - aggressively releasing JDBC connection 
INFO: 09:24:41,039 DEBUG ConnectionManager:464 - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)] 
INFO: 09:24:41,047 DEBUG JpaTransactionManager:539 - Not closing pre-bound JPA EntityManager after transaction 
INFO: 09:24:41,047 DEBUG ExecutionContext:183 - Transitioning to lifecycle stage ResolutionExecution 
INFO: 09:24:41,048 DEBUG HttpCacheInterceptor:183 - Looking for HttpCache on com.jameselsey.salestracker.action.ViewClientAction.save() 
INFO: 09:24:41,160 DEBUG ExecutionContext:183 - Transitioning to lifecycle stage RequestComplete 
INFO: 09:24:41,161 DEBUG JDBCTransaction:186 - rollback 
INFO: 09:24:41,161 DEBUG JDBCTransaction:227 - re-enabling autocommit 
INFO: 09:24:41,162 DEBUG JDBCTransaction:197 - rolled back JDBC Connection 
INFO: 09:24:41,162 DEBUG ConnectionManager:427 - aggressively releasing JDBC connection 
INFO: 09:24:41,162 DEBUG ConnectionManager:464 - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)] 
INFO: 09:24:41,163 DEBUG OpenEntityManagerInViewFilter:119 - Closing JPA EntityManager in OpenEntityManagerInViewFilter 
INFO: 09:24:41,163 DEBUG EntityManagerFactoryUtils:313 - Closing JPA EntityManager 
+0

什麼是您的交易管理器,以及它是如何配置的。 set showSql = true並查看執行到數據庫的查詢。 – Bozho 2009-12-06 08:39:42

+0

你可以發佈合併發生的代碼嗎? – 2009-12-06 09:35:37

+0

我現在沒有使用合併,只能堅持,因爲我只有空表 – Jimmy 2009-12-06 09:58:10

回答

6

自由引用了Java EE規範,無論何時說em.persist(obj),它並不一定意味着直接的SQL數據庫查詢。這意味着命名obj實體將有持久標識,因此它的狀態將被保存並刷新到在一段時間內的持久性存儲,您persist電話後,也許吧,交易完成後,也許,這取決於您的JPA提供商。這可能意味着如果您將persist調用到實體並使用斷點暫停應用程序,則持久數據將不會立即存在於數據庫中。

如果你想有一個SQL查詢權堅持一個實體後,你可以運行em.flush()

2

你做到這一點,稱persist()後?

Stripersist.getEntityManager().getTransaction().commit(); 
相關問題