2012-01-16 4 views
2

データベースに挿入するオブジェクトが約100,000個あります。 Spring/Hibernateを利用してList<MyPojo>を作成し、session.saveOrUpdate()を使用して挿入を実行したいと思います。Spring/Hibernate - 外部キーIDでレコードを挿入するにはどうすればいいですか?

ただし、MyPojoオブジェクトには約25の外部キーが含まれています。実際に参照されるオブジェクトを取得するためにIdによって多くのルックアップを実行することは非常に非効率的です。

したがって、すべてのオブジェクトをロードするのではなく、外部キーID(データベースに格納されるのと同じ方法)を使用したいと思います。

実行中のネイティブクエリ以外に、これを行う別の解決策がありますか?

ありがとうございます!

+0

これは宿題の一部ですか?または自分の自己学習。なぜなら、25個の外部キーを持つテーブルを持つことは、信じがたいです。私は真剣に私のデータベーススキーマを最初に正規化/再設計すると思います。 – Gaurav

+0

これは既存のテーブルであり、その背後にある推論は範囲外です。私はそれがSpring/Hibernate経由で可能かどうか疑問に思っています – user973479

答えて

2

外部キーとオブジェクトをマッピングし、オブジェクトを「更新可能」でなく「挿入可能」ではなく遅延オブジェクトとしてマークすることで、これを行うことができます。

ここにはオブジェクトがありますが、値の書き込みには使用されません。以下は

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "MY_POJO_FK", insertable = false, updatable = false) 
private MyPojo myPojo; 

は通常

@Column(name = "MY_POJO_FK") 
private Long myPojoFK; 

この方法の欠点は、あなたが個別に(なしカスケード)異物を更新する必要があるが、利点は、あなたがロードされません外国でマッピングされた外部キーでありますあなたがそれらを必要とするまでオブジェクト。

これをマッピングするだけでデータを書き込む場合は、オブジェクトのマッピングを心配する必要はありません。

+0

これは私が探しているもののように聞こえます。やってみます。ありがとう! – user973479

関連する問題