@Entity
いくつかの関係を含む があります@OneToMany
が、それらは のコレクションで構成されているためEnum
、 を使用して@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はセット内のプロパティごとに1つの挿入を生成しているようで、インポートが非常に遅くなります(それぞれに10〜20の挿入)記録)。
これを高速化するために長い間費やしてきたので、データベースに手動でインポートできる SQL ファイルを生成することだけを考えています。
@ElementCollection
フィールドをバッチ挿入するように Hibernate に指示する方法はありませんか? 私は何か間違ったことをしていますか?