Почему в Hibernate нет пакетных вставок полей, помеченных @ElementCollection? - PullRequest
1 голос
/ 08 апреля 2020

У меня есть @Entity, содержащий несколько @OneToMany отношений, но, поскольку они состоят из наборов Enum s, я использую @ElementCollection. У сущности есть идентификатор, который генерируется на уровне базы данных (MySQL).

Вот небольшой пример, который я только что составил, который соответствует структуре моей сущности.

@Entity
public class Student {

  @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;

  @ElementCollection(targetClass = Language.class)
  @CollectionTable(name="student_languages", joinColumns=@JoinColumn(name="student_id"))
  private Set<Language> languages;

  @ElementCollection(targetClass = Module.class)
  @CollectionTable(name="student_modules", joinColumns=@JoinColumn(name="student_id"))
  private Set<Module> modules;

  @ElementCollection(targetClass = SeatPreference.class)
  @CollectionTable(name="student_seats", joinColumns=@JoinColumn(name="student_id"))
  private Set<SeatPreference> seatPreference;

[...]
}

Я знаю, что GenerationType.IDENTITY деактивирует пакетирование, но я подумал, что это будет иметь место только для основного объекта , а не для отдельных свойств. Я имею обыкновение массово импортировать несколько сущностей (~ 20 тыс.), Каждая из которых имеет несколько свойств, но Hibernate, похоже, генерирует одну вставку для каждого свойства в наборах, что делает импорт невероятно медленным (от 10 до 20 вставок для каждой запись).

Я потратил так много времени, пытаясь сделать это быстрее, поэтому я подумываю просто создать файл SQL, который я могу вручную импортировать в базу данных.

Есть ли нет способа дать Hibernate пакетную вставку полей @ElementCollection? Я что-то не так делаю?

...