我正在使用spring with hibernate并使用spring transaction manager。我有下面的方法,从另一个事务方法调用。
@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属性。
有人可以解释一下
答案 0 :(得分:4)
如果要修改数据库中的某些数据,则readOnly = true
无法修改。
如果你想要检索一些数据集,那就好了。
所以说到UPDATE
或INSERT
使用readOnly = false
。
好运。
答案 1 :(得分:0)
您似乎正在修改getAllProperties()
方法中从hibernate接收的列表/对象。
如果您提供有关实施的更多详细信息,这将有所帮助。
同时,不要对Hibernate返回的列表/对象执行任何操作(get *操作除外)。 即使您从列表中删除了一个元素(用于过滤),也会尝试更改数据库中的基础值。