czwartek, 18 października 2007

Crazy JPA Requirements

Ostatnio w pracy przenosimy DAO z bezpośredniego SQL + JDBC do JPA (hibernate).
Niestety zapytania są budowane dynamicznie (niektóre kolumny i różne kryteria - between, like, or) i chyba nawet w czystym SQLu byłoby to łatwiej zrobić.
Z drugiej strony JPA jest bardziej elastycznie i błyskawicznie mamy zapisywanie encji. Czas pokaże czy był to dobry wybór.

Gładko te przenosiny oczywiście nie poszły. Dzisiaj np. cały dzień walczyłem z wyjątkiem NPE rzucanym z metody o śmiesznej nazwie:

findIntendedAliasedFromElementBasedOnCrazyJPARequirements

java.lang.NullPointerException
at org.hibernate.hql.ast.tree.FromClause.findIntendedAliasedFromElementBasedOnCrazyJPARequirements(FromClause.java:120)
at org.hibernate.hql.ast.tree.FromClause.getFromElement(FromClause.java:107)

Cóż, widać, że programiści Hibernate mają poczucie humoru i pewnie w ten zabawny sposób wyrazili swoje niezadowolenie z wymagań JPA.
Sam błąd okazał się znany (wariant twierdzenia Defecińskiego) i nawet znaleziony dawno, bo w wersji 3.2.0 GA. Ja obecnie używam hibernate 3.2.5 GA ale nadal kod jest niepoprawiony.
Co i jak poprawić jest napisane w tym issue na JIRA hibernate.