2011-01-20 62 views
5

我刚开始使用JPA 2标准查询API,发现很难学习。看了一下网络,但还没有找到好的示例/教程。有人可以提出一个很好的教程和/或帮助我以下简单的查询,我想要编码?JPA 2 CriteriaQuery问题

我有一类称为事务具有到账户的参考,它属于:

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

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

我需要编写一个查询,得到所有的交易中给予其帐户ID帐户。这是我的做法(这显然不起作用):

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

有人可以指出我在正确的方向吗?

谢谢。 纳雷什

回答

7

解决方案: -

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

为了了解上述代码的含义,请阅读: - Dynamic, typesafe queries in JPA 2.0

而要了解/生成JPA元模型,请阅读: - Hibernate Metamodel Generator Reference Guide

+0

谢谢becomputer06 !这像一个魅力。通过向我的pom添加hibernate-jpamodelgen的依赖关系,我可以非常轻松地生成元模型。我希望m2eclipse插件能够在没有任何问题的情况下提取它,但是它现在没有这样做。如果我在eclipse中启用注释处理器,我将进入递归编译循环!无论如何,基本问题解决了。谢谢。 – Naresh 2011-01-20 23:49:56