2012-05-11 13 views
0

私はこのHQLをhbmファイルに書き込む利点は何ですか?

<query name="GetFabric"> 
     <![CDATA[Select F.FabricName,FS.FabricSeasonName from Fabric F,FabricSeason FS where F.FabricSeasonID=FS.ID]]> 
    </query> 

ようHBMファイルでHQLを書いていますが、我々はコードファイルにクエリを書くことができるので、クエリのニーズ場合はHQL(HBMファイルやコードファイル)

答えて

0

を書くための良い方法は何ですか私は、コードに埋め込むのと同じ単一の関数でexceutedする、しかし、私は別のプロジェクト/クラスでこのクエリを実行する必要がある場合はHibernateマッピングファイルに配置された本のhbm.xmlで

0

名前付きクエリを置く、次のとおりです。

  • より多くのクエリ1時間を定義し、コードでそれをいくつかの時間を使用することができますので、
  • は、グローバルにアクセス可能なJavaコード点在クエリよりも保守が容易
  • より安全な、彼らはSQLインジェクション攻撃
防止私は HBMファイルにHQLを埋め込むでしょう
+0

これら3つの答えは、コード内のHQLでも当てはまります。なぜ彼らはより安全であるのだろうか? – Rippo

+0

ストアドプロシージャとほぼ同じ方法でSQLインジェクションの安全性が向上しています。 – aleroot

+0

埋め込みマッピングファイルのid = '+ id'のClassAから ''を書くことはできません – Rippo

6

主な理由は単純です: -

HQLメタデータが解析され

/確認/キャッシュされたセッションの工場が建設され

これは、エラーが発生した場合、コードが起動した時点でエラーが発生していることを意味します。また、HQLはキャッシュされ、実行準備ができています。コード内でHQLを使用すると、最初の実行時にHQLを解析してキャッシュする必要があるため、最初の実行ではコードがわずかに遅くなります。

関連する問題