是否有可能(以及如何)創建一個條件查詢,該條件查詢會生成一個元素或數組,其中某些元素是來自集合值屬性的集合?包含集合值屬性的條件查詢
鑑於其有名稱的List<SubEntities>
subs
class Dummy {
String name;
List<SubEntity> subs;
}
class SubEntity {
// some attributes
}
我希望有一個標準API查詢與結構導致一些
元組>
的Array
而不是實體Dummy
Tuple
會很好,對於Array
或List
也是如此。
我嘗試以下:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Object[]> q = cb.createQuery(Object[].class);
Root<DummyEntityWithCollection> root = q.from(DummyEntityWithCollection.class);
Join<Object, Object> subs = root.join("subs");
q.select(cb.array(root.get("name"), subs));
List<Object[]> list = em.createQuery(q).getResultList();
但是包含在list
的Object[]
s與第二元件SubEntity
s,而不是List<SubEntity>
。
以同樣的方式這一次失敗:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> q = cb.createTupleQuery();
Root<DummyEntityWithCollection> root = q.from(DummyEntityWithCollection.class);
Join<Object, Object> subs = root.join("subs");
q.multiselect(root.get("name"), subs);
List<Tuple> list = em.createQuery(q).getResultList();
這種變異
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Object[]> q = cb.createQuery(Object[].class);
Root<DummyEntityWithCollection> root = q.from(DummyEntityWithCollection.class);
q.select(cb.array(root.get("name"), root.get("subs")));
List<Object[]> list = em.createQuery(q).getResultList();
完全不和導致一個無效的SQL語句單一.
作爲一個選擇列工作(至少對於Hibernate和HSQLDB來說)。
問題How can I retrieve a collection property using criteria Api似乎表明,這是不可能的,但它基於Hibernate,我想獲得基於JPA的答案。特別是指出JPA規範部分明確表示不可能的答案,我們將不勝感激。
感謝您的指點。我添加了一些明確的參考和鏈接。 –