java - Spring和Postgres事务错误

标签 java spring hibernate jpa postgresql-9.5

目前,我使用 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 中的现有 User 集合。

此用户集合不是从事务内部初始化的,因此当您使用容器管理事务时,实体很可能会分离。

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

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

关于java - Spring和Postgres事务错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42339978/

相关文章:

java - 如何从数组中删除特定元素

java - kafka java 客户端不消费 - 只是卡在 consumer.poll

java - 使用 Spring Security 对 Facebook 用户进行身份验证

java - 是否可以在前端和后端使用服务器发送的事件并从其他后端监听它,而不使用前端浏览器?

spring - 过滤链代理 :/j_spring_security_check has no matching filters

java - Hibernate多对多数据检索

java - JTable数据垂直滚动时不稳定

java - 如何在junit 5中为测试用例设置环境变量

spring - 带有 graphql-spring 的 LazyInitializationException

java - 如何使用 Hibernate 从 JSON 数据动态创建表