2011-01-20 65 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