#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&()));
Я надеюсь, что это кому-то поможет.