我刚开始使用 JPA 2 条件查询 API,发现它很难学。环顾了一下网络,但还没有找到很好的例子/教程。有人可以推荐一个好的教程和/或帮助我解决我正在尝试编码的以下简单查询吗?
我有一个名为 Transaction 的类,它引用了它所属的帐户:
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();
}
有人能指出我正确的方向吗?
谢谢。 纳什
最佳答案
解决方案:-
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
关于java - JPA 2 CriteriaQuery 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742899/