3

次の質問がありますが、Hibernate のドキュメントには記載されていません。または、そこに答えが見つからなかっただけです。グーグルも詳細を教えてくれません。

Entity オブジェクトをパラメーターとして使用し、それを Query.setParameter を使用して HQL にバインドすると、次に何が起こるでしょうか?

  • hibernate は、マップされたパラメータ オブジェクトのエンティティ ID のみを使用して SQL の「where」クエリを作成しますか?
  • または、Hibernate は ID のみに限定されない追加のロジック (場合によっては) を使用しますか? たとえば、hibernate は主キーではない SQL の追加フィールドを追加します。
  • 分離された Entity オブジェクトをパラメーターとして使用するのは危険ですか?

前もって感謝します!

4

1 に答える 1

2

SQLに関しては、IDを使用して単純に比較します。質問に対するコメントが示唆するように、バインドするエンティティはそのセッション内で管理する必要はありません。

基本的に、Hibernate は指定されたエンティティ インスタンスのエンティティ タイプを解決しようとします。次に、その型を使用して JDBC パラメータ値をバインドし、識別子だけを書き込みます。したがって、ここでの前提は、エンティティ インスタンスがその「エンティティ タイプ」に解決できるということです。これは通常、ほとんどの状況で簡単です。困難になるのは、Hibernate 固有の「エンティティ名」機能の場合です。

于 2013-06-20T13:05:30.533 に答える