Вот сценарий, я сохраняю сущность (назовем ее CG-сущностью), используя Spring Data JPA JpaRepository
.В этой CG-сущности у нас так много сущностей One-One, One-Many и MM, и внутри этих сущностей существует больше связей и так далее.Я устанавливаю объект CG по его первичному ключу и добавляю к нему другие объекты.Таким образом, в основном этот объект CG CG должен использовать как FK для большинства других объектов внутри CG.
Некоторые из сущностей являются новыми, а другие устанавливаются путем создания объектов с заданным первичным идентификатором (поэтому нет необходимости использовать соответствующие хранилища, чтобы найти объект и установить его).В модельных классах все основные цвета устанавливаются вручную (без стратегий автоматической генерации) (я не могу представить структуры таблиц, поскольку мне не разрешено это делать). Когда я вызываю функцию .save (), JPA запускает эту функцию
@Transactional
public <S extends T> S save(S entity) {
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}
Отсюда Spring JPA проверяет, является ли CG новой сущностью, путем создания запросов на выборку.Когда я использую SQL-запрос, показанный в отладчике, я заметил, что он использует почти 70 запросов SELECT.В весенних документах Persistable я реализовал это и установил переопределение isNew()
на false
.Я сделал то же самое для тех объектов, где я создал PK.
Но когда я вызываю .save()
для всей операции, данные пружины JPA перед вставкой выполняет почти 800 SELECT
запросов, и существует 70 INSERT
запросов (с запросами на вставку проблем нет).Требуется около 20 секунд, чтобы сохранить запись.Я ссылался на множество потоков, связанных с этим сценарием, и не смог найти хорошего решения SPRING DATA JPA.(SO Thread 1 ) Все, что мне нужно, это сократить время сохранения объекта CG.Есть ли у JPA данные о способах достижения этой цели?