2010-11-10 40 views

Trả lời

7

Không có dấu ngoặc kép xung quanh các tham số. Hãy thử thay vào đó:

String sql = "SELECT email FROM users WHERE (type like 'B') AND (username like ?1)"; 

Có thể bạn cũng muốn kiểm tra kỹ xem bạn thực sự có ý nghĩa gì không.

+0

Tôi nghĩ rằng chúng dựa trên 1 (trái với logic) – Bozho

+1

@Bozho: Chắc chắn? * Trái ngược với JDBC, các số tham số của Hibernate từ số không. * Http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/objectstate.html#objectstate-querying-executing –

+0

Ah, đúng. Tôi đã luôn luôn sử dụng các thông số được đặt tên, do đó, điều này đã eluded tôi :) – Bozho

2

a) Tại sao bạn sử dụng SQL gốc cho một truy vấn đơn giản như thế này? Sử dụng JPQL.
b) Tại sao sử dụng như nếu bạn không sử dụng ký tự đại diện? Sử dụng = để thay thế.

String jpql = 
    "SELECT u.email FROM users u WHERE (u.type = 'B') AND (u.username = '?1')"; 

List results = 
    em.createQuery(jpql) 
     .setParameter(1, username) 
     .getResultList(); 
+2

Tôi không có một đại diện đối tượng cho người dùng, vì vậy đặc biệt là vì nó là một truy vấn đơn giản, tôi đã chọn Native. Tôi thực sự có một DB lớn với nhiều thực thể, tất cả được thực hiện tốt với JPA, nhưng tôi có DB bên ngoài mà tôi sử dụng cho 2-3 truy vấn (như thế này), vì vậy tôi đã chọn để giữ cho nó đơn giản với các truy vấn gốc. –

+0

Ok, điều đó nghe có vẻ hợp lý –

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