我使用了spring和hibernate,并使用了spring事务管理器。我有下面的方法,它是从另一个事务性的方法调用的。
@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属性。
有没有人能解释一下
发布于 2014-08-12 22:51:26
如果你想修改数据库中的一些数据,使用readOnly = true是不可能的。如果你想检索一些数据集,这是可以的。
因此,当涉及到UPDATE或INSERT时,请使用readOnly = false。
祝好运。
发布于 2014-04-23 20:07:25
您似乎正在修改在getAllProperties()方法中从hibernate接收到的列表/对象。
如果您提供更多的实现细节,将会有所帮助。
同时,不要对Hibernate返回的list/object进行任何操作( get*操作除外)。即使您从列表中删除了一个元素(用于过滤),也会尝试更改数据库中的基础值。
https://stackoverflow.com/questions/23243292
复制相似问题