2011-12-01 39 views
9

Có hỗ trợ nào của JPA để ánh xạ các giá trị đơn lẻ tới các kiểu dữ liệu vô hướng không? Ví dụ, để lập bản đồ NUM trong truy vấn sauLấy giá trị đơn bằng JPA?

SELECT COUNT(*) AS NUM FROM EMPLOYEES 

đến một số biến

int numerOfEmployees 

hay tôi phải sử dụng JDBC đối với trường hợp sử dụng như vậy?

Trả lời

14

Vâng, bạn có thể trở lại các loại vô hướng từ JPQL truy vấn

long num = ((Number)em.createQuery("select count(e) from Employee e") 
        .getSingleResult()).longValue(); 

cũng như từ các truy vấn SQL mẹ đẻ:

long num = ((Number)em.createNativeQuery("select count(*) from Employees") 
        .getSingleResult()).longValue(); 

Lưu ý rằng trong một số trường hợp cho kết quả loại có thể phụ thuộc vào cơ sở dữ liệu, tức là nó có thể là một cái gì đó như BigDecimal.

+0

Doh, cảm ơn. Không hiểu rằng có thể từ các tài liệu: http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#createNativeQuery(java.lang.String) [Lưu ý rằng tôi đã phải sử dụng loại đối tượng và sử dụng intValue() để làm ví dụ của bạn.] –

+0

Tôi đã cập nhật giải pháp để sử dụng '(Số) ... longValue()' là một loại siêu của 'BigInteger', tôi không chắc chắn nếu có bất kỳ DB/trình điều khiển nào không trả lại một kiểu con của 'Số' cho trường hợp này nhưng' (long) 'cast trong câu trả lời origiinal không" không bao giờ "làm việc cho tôi. (Tôi cũng tự hỏi nếu bạn có thể chỉ định 'Number.class' như là một loại ánh xạ chỉ để chắc chắn (Double.class dường như không hoạt động: http://stackoverflow.com/questions/8959771/jpql-native-query-using- tổng hợp và đếm) – eckes

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