Tutaj jest późno odpowiedź :-) choć nie jestem pewien, czy wszystko się zmieniło.
Ostatnio napotkał tę samą potrzeby i obejść niego przy concat, to poprzez łączenie kolumny do kolumny pseudo, a następnie na kolumnie countDistinct
pseudo.
Ale nie mogłem użyć criteriaBuilder.concat
ponieważ generowane JPQL użyciu ||
do konkatenacji, który Hibernate had trouble with.
szczęście istnieje @Formula
zatem ja odwzorowane kolumnę pseudo na polu z @Formula
:
@Entity
public class MyEntity {
@Column(name="col_a")
private String colA;
@Column(name="col_b")
private String colB;
@Formula("concat(col_a, col_b)") // <= THE TRICK
private String concated;
}
ten sposób wreszcie mogę użyć pola concated
dla CriteriaBuilder.countDistinct
:
//...
Expression<?> exp = criteriaBuilder.countDistinct(entity.get("concated"));
criteriaQuery.select(exp);
TypedQuery<Long> query = entityManager.createQuery(criteriaQuery);
return query.getSingleResult();
I Żałuję, że JPA (lub, mam nadzieję, że już) nie będzie obsługiwać countDistinct
z wieloma kolumnami, wtedy można by uniknąć tych wszystkich bałaganów.
uwaga : niektóre dbms nie obsługują tego rodzaju składni. nie wiem, czy ktokolwiek to robi. AFAIK Hibernate Doe nie obsługuje tego – Firo
Rzeczywiście wydaje się, że jest to problem. MySQL ma, ale prawdopodobnie niezbyt często, –
czy znalazłeś w międzyczasie jakieś rozwiązanie twojego pytania? Mam taką samą sytuację i nie znajduję dla niej rozwiązania. –