2011-11-15 15 views
14

Tôi có một truy vấn sql như sau:ResultTransformer với createSQLQuery buộc không camelCase trong các lĩnh vực tổ chức

List<Employee> employees = getCurrentSession() 
        .createSQLQuery(
          "select" 
            + e.id as id,e.first_name as firstName,e.password as password 
            + "from employee e,employee_role er,role r where e.employee_id=er.employee_id and er.role_id=r.role_id and r.name='ROLE_ADMIN' ") 
        .setResultTransformer(Transformers.aliasToBean(Employee.class)) 
        .list(); 

tôi có một tài sản trong Employee được gọi là firstName, nhưng khi cố gắng chạy trên dao trong một thử nghiệm đơn vị, tôi đang nhận được ngoại lệ sau:

org.hibernate.PropertyNotFoundException: Could not find setter for firstname on class com.app.domain.Employee 

Tôi không biết nơi hibernate nhận được từ thuộc tính firstname này? Tôi đã không đúng trong truy vấn của tôi?

Mọi cách giải quyết khác là thay đổi thuộc tính thành firstname và getters, setters quá nhưng bất kỳ ý tưởng nào tại sao hibernate lại có hành vi như vậy và cách tránh nó, vì tôi muốn sử dụng camelCase trong miền của mình .

Trả lời

21

Bạn có thể sử dụng addScalar(String columnAlias, Type type) để khai báo rõ ràng bí danh cột của SQL gốc của mình:

getCurrentSession() 
    .createSQLQuery("select e.id as id,e.first_name as firstName,e.password as password from xxxxxx") 
       .addScalar("id",StandardBasicTypes.INTEGER) 
       .addScalar("firstName",StandardBasicTypes.STRING) 
       .addScalar("password",StandardBasicTypes.STRING) 
       .setResultTransformer(Transformers.aliasToBean(Employee.class)) 
       .list(); 
+0

addScalar + cũng chọn trong truy vấn? –

+0

tôi nghĩ vậy, vì chỉ sử dụng 'addScalar()' mà không có 'select as' sẽ cho tôi lỗi. –

12

Để có giải pháp đơn giản hơn, hãy báo giá kép số nhận dạng trong truy vấn khi được gửi đến máy chủ. Thay vì

e.first_name as firstName 

nó nên đọc

e.first_name as "firstName" 

Trong PostgreSQL, kích đúp trích dẫn một lực lượng nhận dạng trường hợp nhạy cảm. Unquoted, nó (chủ yếu) theo tiêu chuẩn SQL và nếp gấp cho một trường hợp duy nhất (mặc dù trường hợp thấp hơn, nơi tiêu chuẩn là trường hợp trên).

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