名前付きクエリが2つあり、それぞれが異なるオブジェクトコンストラクターを使用して結果を選択することを除いて、どちらも同じロジックを持っています。
名前付きクエリ1:
SELECT DISTINCT NEW dk.NewsRoomView(n,p)
FROM NewsItem n LEFT JOIN n.placements p JOIN n.actors a
名前付きクエリ2:
SELECT DISTINCT NEW dk.NewsRoomView(n.id,n.title,SIZE(n.attachments),p.id,p.page)
FROM NewsItem n LEFT JOIN n.placements p JOIN n.actors a
NewsRoomViewクラスの構造
public class NewsRoomView{
public NewsRoomView(NewsItem n, NewsItemPlacement p)
Logger.getLogger(NewsRoomView.class.getName()).log(Level.INFO,"at Contsructor 1");
}
public NewsRoomView(Long id, String title, Integer attachments, Long pId, Integer page){
Logger.getLogger(NewsRoomView.class.getName()).log(Level.INFO,"at Contsructor 2");
}
}
これで、Named Query 1が実行されるたびに、「atコンストラクター1」ステートメントが正常に出力されるため、クエリは結果を返しますが、Named Query 2が実行されると、ステートメント「at Constructor 2」を出力せず、結果も返しません。
上記のコードブロックは、私が実際に持っているもののほんの一部です。実際には、2番目のコンストラクターには23個の長い引数リストがあり、NewsItemエンティティとNewsItemPlacementエンティティのさらにいくつかのフィールドを表します。
2番目のコンストラクターが結果を返すのを妨げる何が間違っているのか、コンストラクターの引数リストのサイズに制限があるのかどうか疑問に思いました。
前もって感謝します。