Jak można używać JPA 2?

0

Jak to możliwe, że JPA 2 jest takie popularne? Przecież to jest tak źle napisane, że szkoda gadać. Zwykłe selecty rozciągają się na 10linii.. przykład:

SELECT t FROM Teacher t WHERE t.firstName = 'prasad'

w jpa(criteria query) wykonuje się tak:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Teacher> query = cb.createQuery(Teacher.class);
Root<Teacher> teacher = query.from(Teacher.class);
query.select(teacher).where(cb.equal(teacher.get("firstName"),"prasad"));
TypedQuery<Teacher> typedQuery = em.createQuery(query);
List<Teacher> teachers = (List<Teacher>) typedQuery.getResultList();
    for (Teacher t : teachers) {
        System.out.println(t.getFirstName() + " "
            + t.getLastName() + " " + t.getSalary());
    }

tak wiem, można pewne elementy skrócić o java8 ale nie w tym rzecz. Trzeba napisać 6linii beznadziejnego kodu aby wykonać selecta. Dziwię się, że społeczność Javy tak to gładko przyjęła i nie widać nigdzie na to hejtu.

dla porównania hibernate criteria query:

Criteria cr = session.createCriteria(Teacher.class);
cr.add(Restrictions.eq("firstName", "prasad"));
List results = cr.list();

Może mi ktoś wyjaśnić dlaczego jpa 2 jest takie popularne?

1

Rozumiem że JPQL to dla ciebie obcy termin?

0

rozumiem, że mogłeś nie doczytać pytania. Zapytałem o criteria queries

0

Pomyśl co jeśli twoje zapytanie to coś innego niż 'SELECT * FROM ... WHERE ...' i zależy od wielu dynamicznych warunków, joiny etc. Widziałem sklejane Stringi i widziałem duże CriteriaQuery, zdecydowanie wole CriteriaQuery. Nie wiem czemu dałeś dla porównania hibernate criteria, mniejsza z tym.

Nie żebym tu bronil JPA, ale hejtujesz je ze złego powodu, przynajmniej według mnie CriteriaQuery akurat są spoko w porównaniu do całej reszty.

0

@Shadov porównałem z prostego powodu - chciałem pokazać, że można zrobić to prościej

0

Moglibyście podrzucić jakiś tutorial do Criteria Query jpa2?

Po co robić joiny w kryteriach zamiast użyć tego co skonfigurowałem adnotacjami, np. @OneToMany?

0
Błękitny Kret napisał(a):

rozumiem, że mogłeś nie doczytać pytania. Zapytałem o criteria queries

Skąd w ogóle pomysł, że Citeria są popularne?
Ja widziałem użycie kilka razy na tysiące normalnych jpaql.
Raczej społeczość javy już nie akceptuje takich dziwactw.

Samo jpa/jpa ql też nie jest spoko. Zobacz JOOQ lub QueryDSL, w tym się SQLe całkiem fajnie pisze.

0

@jarekr000000 da się za pomocą JPQL stworzyć dynamicznie rozszerzający się OR LIKE?

Select * from TAB Where COLUMN like (val1 Or val2 Or val3...) 

Zrobiłem to za pomocą criteria query ale chciałbym to przenieść na JPQL o ile się da i nie potrafię tego sensownie zrobić.

0
Błękitny Kret napisał(a):
Select * from TAB Where COLUMN like (val1 Or val2 Or val3...) 

Zrobiłem to za pomocą criteria query ale chciałbym to przenieść na JPQL

Ciekawe jak to zrobiłeś w criteria? Albowiem, wydaje mi się ( nie mam w głowie, ani pod ręką bnf do sql 2016), że w zwykłym SQLu też to nie przejdzie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1