我可以在调用返回结果集但也更新行的存储过程的方法上使用@Transactional(readOnly = true) 吗?
Posted
技术标签:
【中文标题】我可以在调用返回结果集但也更新行的存储过程的方法上使用@Transactional(readOnly = true) 吗?【英文标题】:Can i use @Transactional(readOnly = true) on a method that calls a stored procedure which returns resultsets but also updates rows? 【发布时间】:2021-11-18 11:28:28 【问题描述】:我有一个通过entityManager
实例调用存储过程的方法
ProcedureCall storedProcedureCall = entityManager.unwrap(Session.class).createStoredProcedureCall(StoredProcedures.GET_WEB_APPLICATION_STATE_DATA_AND_UPDATE_USER_STATUS.toString());
此存储过程检索用户偏好,同时将用户状态从离线更新为在线。我可以使用@Transactional(readOnly = true)
而不是@Transactional
,因为更新查询不是由数据请求应用程序本身完成的吗?
【问题讨论】:
【参考方案1】:答案似乎是否定的。当我在调用存储过程的方法上使用@Transactional(readOnly = true)
时,该存储过程既获取数据又写入数据,我会得到异常。
java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
【讨论】:
以上是关于我可以在调用返回结果集但也更新行的存储过程的方法上使用@Transactional(readOnly = true) 吗?的主要内容,如果未能解决你的问题,请参考以下文章