繁体   English   中英

持久性上下文中的 EntityManager 不适用于 Spring 异步方法

[英]EntityManager from persistence Context not working with Spring Async Method

在我的常规 SpringBoot 应用程序中,我需要异步捕获用户活动。 我的数据库表相关性很差,无法利用 SPring 数据 JPA。 因此,我使用持久性上下文中的 EntityManager 来执行数据库操作。 但是子表中的插入没有完成。 下面的代码是从一个用@Async 注释的方法调用的。下面是代码:@PersistenceContext private EntityManager entityManager;

private Query query;

@Override
@Transactional
public void saveUserClicks(Pojo pojo)
        throws DataIntegrityViolationException {

    
    StringBuilder q1 = new StringBuilder(
            "query1");
    StringBuilder q2 = new StringBuilder(
            "query2");

    Query q1NativeQuery = getNativeQuery(entityManager.createNativeQuery(q1.toString()));
    q1NativeQuery.setParameter(1, param1);
    q1NativeQuery.setParameter(2, param2);
    
    int executed = q1NativeQuery.executeUpdate();
    System.out.println("Value of executed:" + executed);

    Set<ChildPOJO> set = obj1.getSet();
    if (null != set) {
        for (ChildPOJO child : set) {
                q1NativeQuery = getNativeQuery(entityManager.createNamedQuery(q2.toString()));
                q1NativeQuery.setParameter(1, param1);
                q1NativeQuery.setParameter(2, param2);
                executed = q1NativeQuery.executeUpdate();
                System.out.println("Value of executed :" + executed);
            }
        }
    }
}

我能够解决这个问题。 我将代码从 NamedQuery 更改为本机 Query 并且它有效。

From 

q1NativeQuery = getNativeQuery(entityManager.createNamedQuery(q2.toString()));

To 

q1NativeQuery = getNativeQuery(entityManager.createNativeQuery(q2.toString()));

我希望它可以帮助某人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM