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