2011-01-20 41 views
5

Tôi mới bắt đầu với API truy vấn tiêu chí JPA 2 và thấy khó học. Nhìn quanh mạng một chút, nhưng chưa tìm thấy các ví dụ/hướng dẫn hay. Ai đó có thể đề xuất một hướng dẫn tốt và/hoặc giúp tôi với truy vấn đơn giản sau đây tôi đang cố gắng để mã?JPA 2 Câu hỏi Tiêu chí Truy vấn

Tôi có một lớp được gọi là giao dịch mà có một tham chiếu đến các tài khoản mà nó thuộc về:

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

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

tôi cần phải mã hóa một truy vấn mà được tất cả các giao dịch cho một tài khoản cho id tài khoản của mình. Đây là nỗ lực của tôi khi thực hiện việc này (điều này rõ ràng không hoạt động):

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

Ai đó có thể chỉ cho tôi đúng hướng?

Cảm ơn. Naresh

Trả lời

7

Giải pháp: -

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

Để hiểu được ý nghĩa của đoạn code trên xin vui lòng đọc: - Dynamic, typesafe queries in JPA 2.0

Và để hiểu/tạo JPA metamodel xin vui lòng đọc: - Hibernate Metamodel Generator Reference Guide

+0

Cảm ơn bạn becomputer06 ! Công việc này như một cái duyên vậy. Tôi đã có thể tạo metamodel khá dễ dàng bằng cách thêm một phụ thuộc vào hibernate-jpamodelgen vào pom của tôi. Tôi đã hy vọng rằng các plugin m2eclipse sẽ nhặt nó lên mà không có bất kỳ trục trặc, nhưng nó không phải là làm điều đó ngay bây giờ. Nếu tôi kích hoạt bộ xử lý chú thích trong nhật thực, tôi sẽ đi vào một chu trình biên dịch đệ quy! Dù sao, vấn đề cơ bản được giải quyết. Cảm ơn. – Naresh

Các vấn đề liên quan