Я создаю информационную панель команды с совпадениями из CSV-файла. Я создаю две сущности — матч и команду. Я использую Spring Batch для загрузки совпадений в postgre, и он загружается нормально. Я могу проверить завершение загрузки данных, запросив базу данных Postgre. После завершения пакетного задания я хотел бы выполнить несколько запросов для агрегирования данных, для которых я использую EntityManager. Когда я сохраняю EntityManager, я не вижу никаких данных в базе данных и не вижу никаких ошибок. Я попытался вывести данные, хранящиеся в hashMap, и вижу данные, которые я хотел бы сохранить в таблице Team базы данных. Что может быть не так в моей настойчивости?
import com.project.dashboard.model.Team;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobExecutionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class JobCompletionNotificationListener implements JobExecutionListener {
private static final Logger log = LoggerFactory.getLogger(JobCompletionNotificationListener.class);
@PersistenceContext
private final EntityManager em;
@Autowired
public JobCompletionNotificationListener(EntityManager em) {
this.em = em;
}
@Override
@Transactional(propagation = Propagation.REQUIRED)
public void afterJob(JobExecution jobExecution) {
if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
log.info("!!! JOB FINISHED! Time to verify the results");
Map teamData = new HashMap();
em.createQuery("select m.team1, count(*) from Match m group by m.team1", Object[].class)
.getResultList()
.stream()
.map(e -> new Team((String) e[0], (long) e[1]))
.forEach(team -> teamData.put(team.getTeamName(), team));
em.createQuery("select m.team2, count(*) from Match m group by m.team2", Object[].class)
.getResultList()
.forEach(e -> {
Team team = teamData.get((String) e[0]);
team.setTotalMatches(team.getTotalMatches() + (long) e[1]);
});
em.createQuery("select m.winner, count(*) from Match m group by m.winner", Object[].class)
.getResultList()
.forEach(e -> {
Team team = teamData.get((String) e[0]);
if(team!=null)
{
team.setTotalWins((team.getTotalWins() + (long) e[1]));
}
});
teamData.values().forEach(em::persist);
teamData.values().forEach(System.out::println);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... t-any-data
EntityManager persist не сохраняет никаких данных ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ошибка дублирующейся записи JPA в EntityManager.remove, а затем в EntityManager.persist
Anonymous » » в форуме JAVA - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-