Пусть две сущности: Школа (id, name) и Студент (id, name, SchoolId). Существует сопоставление «один ко многим» от ученика к школе. Для сохранения списка учащихся при загрузке Spring:
public void saveStudents(List studentList, School school){
for(Student student: studentList){
student.setSchool(school);
}
studentRepositor.saveAll(studentList)
}
Для списка из 1000 студентов этот метод saveAll() вызывает 1000 вызовов БД, что требует больших затрат. Как это сделать эффективно?
Я пробовал пакетную вставку с использованием Spring.jpa.properties.hibernate.order_inserts=true , отмеченного здесь.
Но это приводит к увеличению задержка, а также если размер списка увеличивается, пакетный вызов и время задержки также увеличиваются.
Как я могу сделать это эффективно?
На самом деле, мне приходится скопируйте определенных учеников в таблицу учеников с другим идентификатором и соответствующие школы в таблицу школ. Я могу сделать это с помощью собственного запроса, но это нарушит функцию независимости базы данных. Может ли кто-нибудь помочь мне в этом отношении?
Две сущности:
@Entity
@Table(name = "school")
public class School extends BaseEntity {
@Id
@Column(name = "id", nullable = false, length = 128)
private String id;
@DiffIgnore
@OneToMany(mappedBy = "school", fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, orphanRemoval = true)
private Set students;
}
и студент:
@Entity
@Table(name = "student")
public class Student extends BaseEntity {
@Id
@Column(name = "id", nullable = false, length = 128)
private String id;
@ShallowReference
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "school_id", referencedColumnName = "id", nullable = false)
private School school;
}
Подробнее здесь: https://stackoverflow.com/questions/782 ... c-db-calls
Несколько объектов, имеющих сопоставление от одного ко многим, вызывают динамические вызовы базы данных. ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Сопоставление данных из одного сервиса в другой, куда поместить сопоставление?
Anonymous » » в форуме C# - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-