2011-01-20 25 views
5

Estoy empezando con API de consulta de criterios JPA 2 y me resulta difícil de aprender. Miró un poco la red, pero todavía no encontré buenos ejemplos/tutoriales. ¿Alguien puede sugerirme un buen tutorial y/o ayudarme con la siguiente consulta simple que estoy tratando de codificar?JPA 2 CriteriaQuery Pregunta

Tengo una llamada de transacción clase que tiene una referencia a la cuenta que pertenece:

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

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

necesito para codificar una consulta que recibe todas las transacciones para una cuenta dada su ID de cuenta. Aquí está mi intento de hacer esto (que obviamente no funciona):

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(); 
} 

Puede alguien me punto en la dirección correcta?

Gracias. Naresh

Respuesta

7

Solución: -

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(); 
    } 

Para comprender el significado del código anterior por favor lea: - Dynamic, typesafe queries in JPA 2.0

Y para entender/generar APP Metamodel lea: - Hibernate Metamodel Generator Reference Guide

+0

Gracias becomputer06 ! Esto funciona como un encanto. Pude generar el metamodelo con bastante facilidad agregando una dependencia a hibernate-jpamodelgen a mi pom. Esperaba que el plugin m2eclipse lo recogiera sin problemas técnicos, pero no lo está haciendo ahora mismo. Si habilito el procesador de anotación en Eclipse voy a un ciclo de compilación recursivo. De todos modos, el problema básico está resuelto. Gracias. – Naresh

Cuestiones relacionadas