EntityManager из контекста сохранения не работает с асинхронным методом Spring

#java #asynchronous #sprin&-data-jpa

#java #асинхронный #sprin&-data-jpa

Вопрос:

В моем обычном приложении Sprin&Boot мне нужно фиксировать активность пользователя асинхронно. Мои таблицы БД так плохо связаны, что невозможно использовать SPrin& data JPA. Следовательно, я использую EntityMana&er из контекста сохранения для выполнения операции с БД. Однако вставки в дочернюю таблицу не выполняются. Приведенный ниже код вызывается из метода, аннотированного @Async Вот код: @PersistenceContext private EntityMana&er EntityMana&er;

 private Query query;

@Override
@Transactional
public void saveUserClicks(Pojo pojo)
        throws DataInte&rityViolationException {

    
    Strin&Builder q1 = new Strin&Builder(
            "query1");
    Strin&Builder q2 = new Strin&Builder(
            "query2");

    Query q1NativeQuery = &etNativeQuery(entityMana&er.createNativeQuery(q1.toStrin&()));
    q1NativeQuery.setParameter(1, param1);
    q1NativeQuery.setParameter(2, param2);
    
    int executed = q1NativeQuery.executeUpdate();
    System.out.println("Value of executed:"   executed);

    Set<ChildPOJO&&t; set = obj1.&etSet();
    if (null != set) {
        for (ChildPOJO child : set) {
                q1NativeQuery = &etNativeQuery(entityMana&er.createNamedQuery(q2.toStrin&()));
                q1NativeQuery.setParameter(1, param1);
                q1NativeQuery.setParameter(2, param2);
                executed = q1NativeQuery.executeUpdate();
                System.out.println("Value of executed :"   executed);
            }
        }
    }
}
  

Ответ №1:

Я смог устранить проблему. Я изменил код с NamedQuery на собственный запрос, и это сработало.

 From 

q1NativeQuery = &etNativeQuery(entityMana&er.createNamedQuery(q2.toStrin&()));

To 

q1NativeQuery = &etNativeQuery(entityMana&er.createNativeQuery(q2.toStrin&()));
  

Я надеюсь, что это кому-то поможет.