我有一个@Entity
包含一些@OneToMany
关系,但由于它们由Enum
s 的集合组成,我正在使用@ElementCollection
. 实体具有在数据库级别(MySQL)生成的 id。
这是我刚刚编写的一个与我的实体结构相对应的小示例。
@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
停用批处理,但我认为这仅适用于主要实体,而不适用于单个属性。我不得不批量导入一些实体(~20k),每个实体都有一些属性,但是 Hibernate 似乎为集合中的每个属性生成一个插入,使得导入速度非常慢(每个插入 10 到 20 个)记录)。
我现在花了很长时间试图让它更快,我正在考虑只生成一个可以手动导入数据库的 SQL 文件。
有没有办法指示 Hibernate 批量插入@ElementCollection
字段?难道我做错了什么?