Hibernate HQLチュートリアルを読んでいたところ、HQLはINSERT INTO..VALUES..
をサポートしていませんが、INSERT INTO..SELECT..
をサポートしています。つまり、HQLは別のテーブルからの挿入のみをサポートしています。
1つのテーブルに同じ値を挿入したいが、そのデータが他のテーブルからのものではない、つまり値が他のテーブルにない場合、HQLでそれを行うにはどうすればよいですか?
また、HQLにおけるそのような制限の背後にある合理性を知りたいですか?
データが別のテーブルからのものである場合、挿入するために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 ...フォームのみがサポートされています。挿入する明示的な値を指定することはできません。
HibernateはORMフレームワーク(オブジェクトリレーショナルマッピング)です。
その仕事は、オブジェクト(エンティティ)をそれに与え、彼がストレージを管理することです(Session.save()
、IIRCを介して)。
したがって、HQLを使用して新しいレコードを挿入するのではなく、ORMメソッドを使用します。
一方(これは推測です)、テーブルからエンティティをロードし、他のエンティティにコピーして1つずつ保存するのは遅いため、HQLは、パフォーマンスのための特定の操作のためだけに、DB内のSQLへのショートカットを提供します目的。
session.save(object)
を使用して、データをテーブルに挿入できます。