@Transactional (readOnly = false, propagation = Propagation.REQUIRED) 正在抛出异常
Posted
技术标签:
【中文标题】@Transactional (readOnly = false, propagation = Propagation.REQUIRED) 正在抛出异常【英文标题】:@Transactional (readOnly = false, propagation = Propagation.REQUIRED) is throwing exception 【发布时间】:2014-04-23 11:44:13 【问题描述】:我正在使用带有休眠功能的 spring 并使用 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 属性,感觉有点奇怪。
谁能解释一下
【问题讨论】:
你在你的方法中做了什么?您是否正在修改休眠映射实例? 不能在只读事务中调用 commit。 【参考方案1】:如果您想修改数据库中的某些数据,使用readOnly = true
是不可能的。
如果你想检索一些数据集也没关系。
所以当涉及到UPDATE
或INSERT
时,请使用readOnly = false
。
祝你好运。
【讨论】:
【参考方案2】:您似乎正在修改getAllProperties()
方法中从休眠接收的列表/对象。
如果您提供更多有关实施的详细信息,将会有所帮助。
同时,不要对 Hibernate 返回的列表/对象执行任何操作(get* 操作除外)。 即使您从列表中删除了一个元素(用于过滤),它也会尝试更改数据库中的基础值。
【讨论】:
以上是关于@Transactional (readOnly = false, propagation = Propagation.REQUIRED) 正在抛出异常的主要内容,如果未能解决你的问题,请参考以下文章
Spring中@Transactional(readOnly = false)的作用是啥?
@Transactional (readOnly = false, propagation = Propagation.REQUIRED) 正在抛出异常
spring 事务管理之只读事务@Transactional(readOnly = true)
Spring 注解@Transactional readOnly=true
我可以在调用返回结果集但也更新行的存储过程的方法上使用@Transactional(readOnly = true) 吗?