2009-08-31 8 views
3

私はJPAエンティティを持っています。約2〜5つのクエリのうちでJPAで部分的なエンティティを照会

public class Inventory { 
private String productname; 
private String manufacturer; 
private Float retailprice; 
private Integer unitssold; 
private String ourcomment; 
} 

は、私は、全体の実体を必要とするが、残りの時間は、私がとourcomment unitssold 興味がありません。

クエリを作成して大きな結果リストを取得するのは無駄だと思うが、情報の3/5しか必要としない。私はこれをわずかに最適化したいと思います。これは継承を使って行うことができます。

どのようにですか?

答えて

4

継承?いいえ

あなたのリストの最初の3つのフィールドで構成された実際のドメインエンティティを持っていても、Inventoryがそれを拡張していたとしても、そのエンティティに対して行ったクエリはすべて必然的に異なるテーブルにマップされている)。

あなたができることは、4番目と5番目のプロパティを「遅延」としてマップすることです。あなたのJPAプロバイダがそれを行うことができるようにするためにバイトコードを採用する必要があります:

@Basic(fetch = FetchType.LAZY) 
private Integer unitssold; 

@Basic(fetch = FetchType.LAZY) 
private String ourcomment; 

あなたがすべてを取得する必要があるクエリでfetch all propertiesを指定する必要があります。他の人は最初にアクセスされるまでプロパティ値を取得しません。

クエリが大きな結果セットを返し、「レイジー」プロパティーがかなり大きい場合(たとえばIntegerの場合は実行しませんが、Stringは実行可能な場合があります) long)

0

おそらく、別のエンティティを同じテーブルにマップして、読み取り専用としてマークできます。

関連する問題