Spring 和 Postgres 事务错误

Spring and Postgres transaction Error

目前,我正在使用 Spring 4.0.6 和 Postgresql 9.5。我正在将一个 serviceClass1 调用到另一个 serviceClass2 并获得如下交易异常:

serviceClass1.class

`@Transactional(readOnly = false, propagation = Propagation.REQUIRED,rollbackFor= { Throwable.class })
public Map<String, Object> storeUsersList(Map<String, Object> mapOfParams) throws Exception {
    Map<String, Object> returnMap = new HashMap<String, Object>();
if (userListToStore != null && !userListToStore.isEmpty()) {                
integrationService.manangePassCodes(org,userListToStore.size());
                for (Users singleUser : userListToStore) {
                    try {
                        getEm().update(singleUser);`

serviceClass2.class

@Override
@Transactional(readOnly=false,propagation=Propagation.REQUIRED
     ,rollbackFor{Throwable.class})
public void manangePassCodes(Organizations org,int userToRegisterCount)throws Exception{
//some Logic

这里我在这个地方遇到异常 - getEm().update(singleUser);

Exception SQL state [25P02]; error code [0]; could not extract ResultSet

我刚刚读到有关 Postgres 事务的错误,但无法获得我应该用于 Hibernate 的内容。

不能 100% 确定情况是否如此,但在您的 storeUsersList 方法中,您似乎正在重用存储在实例变量 userListToStore.[=13= 中的现有用户集合]

此用户集合未从事务内部初始化,因此实体最有可能被分离,因为您正在使用容器管理的事务。

在我看来,您应该在执行更新之前合并每个实体,以便持久性上下文知道它们:

for (Users singleUser : userListToStore) {
      try {
        getEm().merge(singleUser);
        getEm().update(singleUser);

感谢 Speedy 的帮助,我已经通过检查更多并阅读此错误消息解决了我的问题 above.I 正在从单个交易中调用许多交易,这意味着在我的情况下,由于之前的交易下一个错误被中止,因为它在数据库上有写锁。在您整理上一个交易之前,您当前的交易不会被保存。 之前的交易有愚蠢的错误 getEm().update(singleUser); 当前交易无误 integrationService.manangePassCodes(org,userListToStore.size‌()); 一段代码 由于两者属于不同的服务,但我已经注释了 @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = { Throwable.class }) propagation = Propagation.REQUIRED 表示它将支持当前事务,如果 none 存在则创建一个新事务。 所以它给了我错误 25P02 - 交易中止。

参考 Link 1 - postgresql.org/message-id/25677724.post@talk.nabble.com

参考 Link 2 - postgresql.org/docs/9.4/static/errcodes-appendix.htm

参考 Link 3 - https://www.postgresql.org/message-id/8829.1173816732%40sss.pgh.pa.us