web-dev-qa-db-ja.com

HibernateでHQLを使用して1つのテーブルにデータを挿入する

Hibernate HQLチュートリアルを読んでいたところ、HQLはINSERT INTO..VALUES..をサポートしていませんが、INSERT INTO..SELECT..をサポートしています。つまり、HQLは別のテーブルからの挿入のみをサポートしています。

1つのテーブルに同じ値を挿入したいが、そのデータが他のテーブルからのものではない、つまり値が他のテーブルにない場合、HQLでそれを行うにはどうすればよいですか?

また、HQLにおけるそのような制限の背後にある合理性を知りたいですか?

12
Anand

データが別のテーブルからのものである場合、挿入するためにhqlを使用する必要はありません。

エンティティへの参照を取得し、Hibernateセッションを保持して、save()を呼び出すだけです。

http://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch04.html#d0e2116 によると

INSERTステートメントの疑似構文

INSERT INTO EntityName properties_list select_statement

INSERT INTO ... SELECT ...フォームのみがサポートされています。挿入する明示的な値を指定することはできません。

7
swemon

HibernateはORMフレームワーク(オブジェクトリレーショナルマッピング)です。

その仕事は、オブジェクト(エンティティ)をそれに与え、彼がストレージを管理することです(Session.save()、IIRCを介して)。

したがって、HQLを使用して新しいレコードを挿入するのではなく、ORMメソッドを使用します。

一方(これは推測です)、テーブルからエンティティをロードし、他のエンティティにコピーして1つずつ保存するのは遅いため、HQLは、パフォーマンスのための特定の操作のためだけに、DB内のSQLへのショートカットを提供します目的。

3
SJuan76

session.save(object)を使用して、データをテーブルに挿入できます。

1
Ponmudi VN