12

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

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

また、HQLでのそのような制限の背後にある理論的根拠を知りたいですか?

4

3 に答える 3

7

データが別のテーブルからのものである場合、挿入するために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...フォームのみがサポートされています。挿入する明示的な値を指定することはできません。

于 2012-10-05T11:21:19.117 に答える
3

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

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

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

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

于 2012-10-05T11:20:39.357 に答える
1

session.save(object)テーブルにデータを挿入するために使用できます。

于 2013-03-22T04:55:32.347 に答える