春和Postgres交易错误

问题描述 投票:1回答:2

目前,我使用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);

例外SQL状态[25P02];错误代码[0];不能提取的ResultSet

刚才我看到有关此错误的Postgres左右交易,但没能得到我应该怎么使用Hibernate的。

java spring hibernate jpa postgresql-9.5
2个回答
1
投票

不是100%肯定,如果是这样的话,但在你的storeUsersList方法,你似乎可以重用现有的用户收集存储在一个实例变量userListToStore

用户的集合,因此实体是最容易被分离,因为你正在使用容器管理的事务不是从事务内部初始化。

在我看来,你执行更新之前,使持久化上下文是意识到它们的存在,你应该合并的每个实体:

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

1
投票

感谢您的迅速帮助,我有我的问题,通过检查更多阅读有关此错误消息above.I从单个事务调用许多交易解决,这意味着在我的情况下,由于前一个交易错误,因为它有下一个被中止在DB的写锁。和当前的交易将不会被保存,直到你理清前一个。以前的事务其中有愚蠢的错误getEm().update(singleUser);其中有什么不对integrationService.manangePassCodes(org,userListToStore.size‌());一段代码,因为这两个当前事务属于不同的服务,但我已经与@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = { Throwable.class })传播注释= Propagation.REQUIRED意味着它将支持当前事务,如果不存在,创建一个新的。所以,它给了我错误25P02 - 事务中止。

参考链接1 - postgresql.org/message-id/[email protected]

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

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

© www.soinside.com 2019 - 2024. All rights reserved.