Несколько объектов, имеющих сопоставление от одного ко многим, вызывают динамические вызовы базы данных.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Несколько объектов, имеющих сопоставление от одного ко многим, вызывают динамические вызовы базы данных.

Сообщение Anonymous »

Пусть две сущности: Школа (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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»