У меня есть @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
? Я что-то не так делаю?