@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 是不可能的。 如果你想检索一些数据集也没关系。

所以当涉及到UPDATEINSERT 时,请使用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) 吗?

只读事务@Transactional(readOnly = true)