HQLクエリからオブジェクトを作成しようとしていますが、私が間違っていることを理解できません。
クエリ:
String query = "SELECT product.code, SUM(product.price), COUNT(product.code)
from Product AS product
GROUP BY product.code"
(または、マップされていなくても、新しいMyCustomList(product.code、SUM(...を使用する必要がありますか?)
class MyCustomList{
public String code;
public BigDecimal price;
public int total;
// Constructor
public MyCustomList(String code, String price, int total){ //...
データの取得:
// This throws ClassCastException
List<MyCustomList> list = MyClass.find(query).fetch();
Playフレームワークの使用
セクション 15.6。select句 はあなたが達成しようとしていることをカバーしていると思います:
15.6。select句
...
クエリは、複数のオブジェクトやプロパティを
Object[]
型の配列として返すことができます。select mother, offspr, mate.name from DomesticCat as mother inner join mother.mate as mate left outer join mother.kittens as offspr
または
List
として:select new list(mother, offspr, mate.name) from DomesticCat as mother inner join mother.mate as mate left outer join mother.kittens as offspr
または-クラス
Family
に適切なコンストラクターがあると仮定します-実際のタイプセーフJavaオブジェクトとして:select new Family(mother, mate, offspr) from DomesticCat as mother join mother.mate as mate left join mother.kittens as offspr
あなたの場合、あなたはおそらく以下を望みます:
SELECT new MyCustomList(product.code, SUM(product.price), COUNT(product.code))
from Product AS product
GROUP BY product.code
ここで、MyCustomList
は必ずしもマップされたエンティティである必要はありません。
これは古い投稿ですが、HQLにも使用できます。
Query query = session.createQuery("SELECT code AS code FROM Product");
またはこれはSQLの場合:
Query query = session.createSQLQuery("SELECT code AS code FROM Product");
と:
query.setResultTransformer(Transformers.aliasToBean(MyCustomList.class));