§10.2.7.2に記載されているように、完全に有効なユースケースがあるため、SELECTNEWがあります。EJB 3.0 JPA仕様のSELECT句のJPQLコンストラクタ式:
SELECTリストでコンストラクターを使用して、1つ以上のJavaインスタンスを返すことができます。指定されたクラスは、エンティティである必要はなく、データベースにマップされている必要もありません。コンストラクター名は完全修飾されている必要があります。
SELECT NEW句でエンティティクラス名が指定されている場合、結果のエンティティインスタンスは新しい状態になります。
SELECT NEW com.acme.example.CustomerDetails(c.id, c.status, o.count)
FROM Customer c JOIN c.orders o
WHERE o.count > 100
つまり、(ではなく)タイプセーフな方法でオブジェクトの完全なエンティティまたは完全なグラフを取得したくない場合は、SELECTNEWを使用しますObject[]
。クエリの結果をエンティティクラスにマップするか、マップされていないクラスにマップするかは、選択内容によって異なります。典型的な例は、リスト画面です(すべての詳細が必要ない場合があります)。
言い換えれば、どこでも使用しないでください。ただし、使用を禁止しないでください(黒または白だけのものはほとんどありません)。