2014-04-23 29 views
0

我使用spring和hibernate並使用spring事務管理器。我有下面的方法,這是從另一個事務性的方法調用。@Transactional(readOnly = false,propagation = Propagation.REQUIRED)拋出異常

@Transactional (readOnly = true, propagation = Propagation.REQUIRED) 
public Map<String, String> getAllProperties() 
{ } 

我面臨的問題是;如果我運行此我得到下面的異常

Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: commit failed 

但是相反,如果我改變註釋打擊一個或刪除註釋屬性,它只是正常工作

@Transactional (readOnly = false, propagation = Propagation.REQUIRED) 
public Map<String, String> getAllProperties() 
{ } 

我感覺到它那種奇怪因爲我只更改了readOnly屬性。

可有人請解釋這個

+2

你在做什麼?你在修改hibernate映射的實例嗎? – Harmlezz

+0

您無法在只讀事務中調用提交。 – Stefan

回答

0

似乎你修改從休眠收到getAllProperties()方法中的列表/對象。

如果您提供了更多的實施細節,它會有所幫助。

同時,不要對Hibernate返回的列表/對象(get *操作除外)執行任何操作。 即使您從列表中刪除了一個要嘗試更改數據庫中基礎值的元素(用於過濾)。

3

如果要修改數據庫中的某些數據,則不可能使用readOnly = true。 它可以,如果你想檢索一些數據集。

因此,當涉及到UPDATEINSERT使用readOnly = false

GOOD LUCK。