JPQLでこんなのを書いてみました。
select p1, p2 from Product as p1, Product as p2 where p1.name = p2.name
戻り値は2つのエンティティ。
戻り値の結果
- ElipseLink2.4.0
- Hibernate4.1.9.Final
結果は、両方共Listで帰ってきて、その下にObjectの配列[p1,p2]が入っていました。
これを使うとしたらキャストが必要になるなぁ。
なんとなく微妙です。
そして、なぜEclipseLinkはVectorで返す・・・・・
追記:
[twitter:@shinsan68k]さんに教えて頂きましたが、エンティティを引数にしたNEW句が書けるみたいです。
select new megascus.Products(p1, p2) from Product as p1, Product as p2 where p1.name = p2.name
public class Products { List<Product> p; public Products(Product p1, Product p2) { this.p = Arrays.asList(new Product[]{p1, p2}); } }
※コンストラクタの引数を可変長引数にしてみたら双方ともエラーになりました。
追記2:
Hibernateでは以下の様なDelete文を受け付けてくれました。
Delete Product
これはJPQLとしては間違っていて、以下のように書く必要があります。
Delete from Product
微妙なところで、可搬性に難があるなぁ。