persist()
エンティティ オブジェクトを作成し、Hibernate を JPA プロバイダーとして使用して呼び出して、データベースにデータを入力しようとしています。
最初は、データベースは空です。次に、エンティティ インスタンス (100,000 インスタンス) をループで作成し、それぞれを永続化します。
この操作では、すべてのエンティティをデータベースに挿入するのに 10 分ほどかかります。私は無料のタイヤ アマゾン クラウド サーバー マシン、600 MB の RAM メモリを使用しています。
ループは次のようなものです。
@Transactional
void populateDataBase()
{
for(int i=0; i<100000; i++)
{
MyEntityPK entityInstancePK = new MyEntityPK(idfield1, idField2, idField3);
MyEntity entityInstance = new MyEntity();
entityInstance.setId(entityInstancePK);
entityInstance.setField1(integerValue);
entityInstance.setField2(integerValue);
entityInstance.persist();
}
}
この行にコメントを付けるpersist()
と、ループは数秒で終了します。行のコメントを外すentityInstance.persist();
と、ループが完了するまでに 10 分ほどかかります。
この操作は時間とメモリを消費しますか? またはそれは速くあるべきではありませんか?この場合、persist() の代わりに merge() を呼び出す方が良いですか? たぶんもっと速いですか?