2010-12-15 213 views
-1

我想將一條記錄保存到mysql 5.1 db。當我使用實體manager.persist()或合併()方法,那麼它甚至沒有保存記錄到數據庫,當我嘗試使用本機插入語句是這樣的,它拋出異常JPA查詢拋出異常

Query query = entityManager.createNativeQuery("insert into Employee(firstName,lastName,phone,email) values(?,?,?,?);"); 
    query.setParameter(1, employee.getFirstName()); 
    query.setParameter(2, employee.getLastName()); 
    query.setParameter(3, employee.getPhone()); 
    query.setParameter(4, employee.getEmail()); 

異常從拋出以上查詢是

org.springframework.orm.jpa.JpaSystemException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query 

請幫幫我!!!!

感謝

+0

我們可以看到更多的堆棧跟蹤嗎?我假設你在查詢上調用executeUpdate。如果您不僅僅保存員工實例,爲什麼還要使用jpa? JPA的全部內容是不必做你正在做的事情。 – hvgotcodes 2010-12-15 20:27:16

+0

那我該如何保存這些數據。我想使用entityManager.persist()或merge(),但它不保存數據。請您詳細說明如何在沒有JPA的情況下保存數據? – user509755 2010-12-15 20:30:07

+0

除了Bozho對完整異常和堆棧跟蹤的請求之外,如果你可以發佈你的Employee類的代碼,尤其是分配ID的方式,equals()和hashcode()的實現方式,以及您定義的唯一約束(如果有的話)。 – Mopper 2010-12-16 10:07:42

回答

3

雖然我不能馬上幫查詢,因爲你是最有可能省略堆棧跟蹤的重要組成部分,我有一個解決辦法:

不要使用INSERT HQL查詢。這不是JPA應該工作的方式。相反,請創建一個new Emplyee()對象,該對象應該是@Entity,並設置其屬性,然後entityManager.persist(employee)

爲了達到此目的,您需要一個正在運行的事務。 entityManager.getTransaction().being()會啓動一個,而entityManager.getTransaction().commit()會提交它。

+0

我的道是@Transactional,所以我不認爲我需要使用begin()和commit()。順便說一下persist(employee)不保存數據,因爲它拋出EntityExist異常。現在,如果我檢查分貝,根本沒有記錄。所以我正在進一步調查...... – user509755 2010-12-15 20:43:54

+0

給出整個例外。整個堆棧跟蹤。它總是很重要。 – Bozho 2010-12-15 21:11:13