I\'m trying, as in title, to insert a subquery in select clause like in this simple SQL:
SELECT id, name, (select cou
It is supported in JPA 2.1 and Hibernate 5.0. You just had to add getSelection() to the subquery argument in the multiselect of the main query.
c.multiselect(item.get("id"),item.get("nome"), scount.getSelection());
Take a look at this working example:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery cq = builder.createQuery(NotificationInfo.class); //wrapper class
Root n = cq.from(Notification.class); //root entity
//Subquery
Subquery sqSent = cq.subquery(Long.class);
Root sqSentNU = sqSent.from(NotificationUser.class);
sqSent.select(builder.count(sqSentNU));
sqSent.where(
builder.equal(sqSentNU.get(NotificationUser_.notification), n), //join subquery with main query
builder.isNotNull(sqSentNU.get(NotificationUser_.sendDate))
);
cq.select(
builder.construct(
NotificationInfo.class,
n.get(Notification_.idNotification),
n.get(Notification_.creationDate),
n.get(Notification_.suspendedDate),
n.get(Notification_.type),
n.get(Notification_.title),
n.get(Notification_.description),
sqSent.getSelection()
)
);
em.createQuery(cq).getResultList();