2

いくつかの記事では、テーブルのすべての列をフェッチするべきではないと述べられています。避けSelect * from table1て書くべきSelect name, age, phone from table1です。

Q1)これは、HQLを書いている間、書くべきではないという意味from Table1ですか?

Q2)一部の企業では、selectステートメントを作成する代わりに、Javaコードでストアドプロシージャを使用してデータをフェッチしていると聞きました。このテクニックは本当に効率的ですか?

Q3)単一のアプリケーションについて聞いたことがあります。単一のデータベースではなく、多くのデータベースが使用される場合があります。どうしてこんなことに?このテクニックは良いものですか?

4

2 に答える 2

4

回答1:Hibernateは使用しませんselect *:に変換select from tableされselect col1, col2, col3 ... from table1ます。さらに、休止状態にする列を定義しない場合、列は選択されません。

回答2:ストアドプロシージャの使用を避けることをお勧めします。特に単純なデータ取得の場合、実際にクエリよりも高速になることはめったにありません。それらを使用しない理由はたくさんあります。たとえば、1)移植性がない、2)デバッグが不可能、3)単体テストができない、リストは続きます

回答3:1つのデータベースを使用し、データを分割しません。管理が難しすぎて、システムにコンポーネントを追加しても利益が得られません(また、ほとんどのシステムは1つのデータベースを使用するため、それほど悪くはありません)。ただし、分散データベースは良い考えです。

于 2012-04-22T18:29:47.740 に答える
1

ORMを使用するという考え方は、Javaオブジェクトを操作することです。したがって、使用してfrom Tableも問題ありません。オブジェクトを操作する準備ができていますが...

BlobsまたはClobsの大きなフィールドがあり、それらをレイジーロードとしてマークする場合があります。そのため、メモリを消費するセッションキャッシュにそれらを保持する必要はありません。

100 000行を選択する必要がある場合もありますが、ORMマッピングを使用しても意味がありません。SQLネイティブクエリにフォールバックする必要があります(これもHibernateによって適切に管理されます)。

小さな結果セット(where句で制限できます)の場合、大きなBLOBとCLOBがない限り、HQLを使用しても問題ありません。結果セットは小さいので、必要なフィールドを選択するかどうかはそれほど重要ではありません(もちろん、これは可能ですが、一部のデータが欠落している場合、他のチームメンバーが予期しない可能性があります)。

大規模なデータセットの場合、HQLは意味がありません。

于 2012-04-22T18:21:54.497 に答える