JPA 2 КритерииВопрос вопрос - PullRequest
5 голосов
/ 20 января 2011

Я только начинаю с API запроса критериев JPA 2 и считаю его сложным для изучения.Немного огляделся по сети, но пока не нашел хороших примеров / учебников.Может ли кто-нибудь предложить хороший учебник и / или помочь мне в следующем простом запросе, который я пытаюсь кодировать?

У меня есть класс с именем Transaction, который ссылается на принадлежащую ему учетную запись:

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

public class Account {
    private Long 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();
}

Может ли кто-нибудь указать мне правильное направление?

Спасибо.Naresh

1 Ответ

7 голосов
/ 20 января 2011

Решение: -

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

Чтобы понять значение вышеприведенного кода, прочитайте: - Динамические, безопасные для типов запросы в JPA 2.0

И для понимания / созданияМетамодель JPA, пожалуйста, прочитайте: - Справочное руководство генератора метамодели Hibernate

...