Przełożenie funkcji SQL w Criteria

głosy
0

Próbuję odtworzyć tego zapytania sql do hibernacji kryteriów zapytania jaki sposób można osiągnąć tha.

SELECT * 
FROM PERSON
WHERE 
    BIRTH_DATE IS NOT NULL 
    AND (YEAR(GETDATE()) - YEAR(BIRTH_DATE)) in(6,18,26)
ORDER BY 
    MONTH(BIRTH_DATE) ASC, 
    DAY(BIRTH_DATE) ASC

Globalnie, co chcę jest, aby wszyscy w wieku 6,18 i 26 lat zamówionych tylko przez miesiąc, a nie dzień w roku, aby mieć listę kolejnych jubileuszy.

W rzeczywistości mój problem w tej sytuacji jest to, że nie wiem, w jaki sposób mogę korzystać z funkcji SQL w kryteriach wiem, jak to działa, ale kryteria kwerendy jest dość trudne, nie mam pojęcia, jak odtworzyć go w kryteriach = /

Criteria criteriaBirthDates = his.getSession().createCriteria(Person.class);
criteriaBirthDates.add(Restrictions.isNotNull(birthdate));
criteriaBirthDates.addOrder(Order.asc(month(birthdate)));
criteriaBirthDates.addOrder(Order.asc(day(birthdate)));
return criteriaBirthDates.list();

Wielkie dzięki!

Utwórz 17/11/2015 o 11:59
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Poszedłem więc do oficjalnego forum hibernacji i tu była odpowiedź:

Cześć akyo

Niestety, jest to niemożliwe, należy to zrobić poprzez QBC, jako stary funkcjonalności QBC nie ulegnie poprawie w przyszłości.

Proszę używać nowej funkcji „Kryteria WZP to zrobić”, na przykład

Kod:

CriteriaBuilder cb = this.em.getCriteraBuilder();
CriteriaQuery<Person> cq = cb.createQuery(Person.class);
Root<Person> person = cb.from(Person.class);
cq
.where(
    cb.isNotNull(person.get(Person_.birthDate),
    cb.in(
        cb.diff(
            cb.function("YEAR", cb.function("GETDATE")),
            cb.function("YEAR", person.get(Person_.birthDate))
        )
    )
    .value(6, 8, 26)
)
.orderBy(
    cb.asc(cb.function("MONTH", person.get(Person_.birthDate))),
    cb.asc(cb.function("DAY", person.get(Person_.birthDate)))
);

Gotowe!

Odpowiedział 18/11/2015 o 14:02
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more