6

@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 に指示する方法はありませんか? 私は何か間違ったことをしていますか?

4

2 に答える 2