5

私はJPA2基準クエリ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();
}

誰かが私を正しい方向に向けることができますか?

ありがとう。ナレシュ

4

1 に答える 1

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

上記のコードの意味を理解するには、以下をお読みください。- JPA2.0での動的でタイプセーフなクエリ

また、JPAメタモデルを理解/生成するには、以下をお読みください。- Hibernateメタモデルジェネレータリファレンスガイド

于 2011-01-20T06:24:55.113 に答える