2011-01-20 15 views
5

Właśnie zaczynam z API zapytań o kryteria JPA 2 i stwierdzam, że trudno się z nim nauczyć. Rozglądałem się trochę po sieci, ale nie znalazłem jeszcze dobrych przykładów/tutoriali. Czy ktoś może zaproponować dobry samouczek i/lub pomóc mi w następującym prostym zapytaniu, które próbuję zakodować?JPA 2 CriteriaQuery Question

Mam klasy o nazwie transakcji, która ma odniesienie do Rachunku, że należy:

public class Transaction { 
    private Account account; 
    ... 
} 

public class Account { 
    private Long id; 
    ... 
} 

muszę zakodować kwerendy, która pobiera wszystkie transakcje na koncie ze względu na jego konto id. Oto moja próba zrobienia tego (co oczywiście nie działa):

public List<Transaction> findTransactions(Long accountId) {   
    CriteriaBuilder builder = entityManager.getCriteriaBuilder(); 
    CriteriaQuery<Transaction> query = builder.createQuery(Transaction.class); 
    Root<Transaction> transaction = query.from(Transaction.class); 

    // Don't know if I can do "account.id" here 
    query.where(builder.equal(transaction.get("account.id"), accountId)); 
    return entityManager.createQuery(query).getResultList(); 
} 

Czy ktoś może wskazać mi właściwy kierunek?

Dzięki. Naresh

Odpowiedz

7

Rozwiązanie: -

public List<Transaction> findTransactions(Long accountId) { 
     CriteriaBuilder builder = entityManager.getCriteriaBuilder(); 
     CriteriaQuery<Transaction> query = builder.createQuery(Transaction.class); 
     Root<Transaction> _transaction = query.from(Transaction.class); 

     Path<Account> _account = _transaction.get(Transaction_.account); 
     Path<Long> _accountId = _account.get(Account_.id); 

     query.where(builder.equal(_accountId, accountId)); 
     return entityManager.createQuery(query).getResultList(); 
    } 

Aby zrozumieć sens powyższego kodu proszę przeczytać: - Dynamic, typesafe queries in JPA 2.0

I zrozumieć/generować JPA Metamodel proszę przeczytać: - Hibernate Metamodel Generator Reference Guide

+0

Dziękuję becomputer06 ! Działa to jak urok. Udało mi się dość łatwo wygenerować metamodel, dodając zależność do hibernacji-jpamodelgen do mojego pom. Miałem nadzieję, że wtyczka m2eclipse odbierze go bez żadnych zakłóceń, ale nie robi tego teraz. Jeśli włączę procesor adnotacji w czasie zaćmienia, przechodzę do rekurencyjnego cyklu kompilacji! W każdym razie podstawowy problem został rozwiązany. Dzięki. – Naresh