【问题标题】:EntityManager from persistence Context not working with Spring Async Method持久性上下文中的 EntityManager 不适用于 Spring Async 方法
【发布时间】:2020-11-28 09:29:46
【问题描述】:

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

【问题讨论】:

    标签: java asynchronous spring-data-jpa


    【解决方案1】:

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

    From 
    
    q1NativeQuery = getNativeQuery(entityManager.createNamedQuery(q2.toString()));
    
    To 
    
    q1NativeQuery = getNativeQuery(entityManager.createNativeQuery(q2.toString()));
    

    我希望它对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多