2011-01-19 26 views
6

là có cách đơn giản để xử lý việc tiêm SQL theo thứ tự HQL theo Hibernate theo mệnh đề. Các thông số được đặt tên rõ ràng không hoạt động cho nó.Xử lý việc chèn SQL theo thứ tự HQL theo khoản

EDIT:

Hãy gửi theo cách của bạn xử lý vấn đề này. Tôi muốn xem giải pháp của người khác và dạy từ họ.

Cảm ơn mọi đề xuất và giải pháp.

+0

Tại sao không sử dụng nhibernate với LINQ? – Dave

+0

@Dave Xin chào, tôi đang sử dụng Java nên linq không thể truy cập được đối với tôi. –

+0

Tôi nên chọn chiếc rom lên ngủ đông, thay vì nHibernate! Chúc may mắn giải quyết vấn đề này. – Dave

Trả lời

3

Bạn có thể sử dụng API tiêu chí Hibernate thay vì HQL.

Kiểm tra API tiêu chí rằng tiêu chí đơn hàng tham chiếu thuộc tính hợp lệ.

nếu bạn cố gắng someting như thế:

public void testInjection() { 
    String orderBy = "this_.type desc, type"; 

    Criteria crit = this.getSession().createCriteria(DemoEntity.class); 
    crit.addOrder(Order.asc(orderBy));  
    crit.list(); 
} 

Bạn sẽ nhận được một QueryException: "could not resolve property this_ of de.test.DemoEntity" ném bởi AbstractPropertyMapping.

+0

Xin chào, cảm ơn bạn đã trả lời nhưng tôi đang làm việc để chạy dự án mà tôi không thể chuyển sang API tiêu chí. Vì vậy, tôi đang tìm kiếm chính xác những gì bạn trỏ nhưng trong HQL. –

0

Hibernate sử dụng PreparedStatement's đã được gaurd chống lại SQL injection. Trong một PreparedStatment, các đối số được gắn với câu lệnh thay vì có một câu lệnh SQL văn bản thuần túy đang được phát hành. Bạn không cần phải lo lắng về việc tiêm SQL khi sử dụng chế độ ngủ đông.

Đây là một chuỗi đảm bảo rằng ngủ đông an toàn với việc tiêm SQL Click Here.

+0

Vâng, đó là sự thật, nhưng nếu bạn sử dụng setParameter trong SQL PreparedStatment giống như <... order by 'name' ...> và kết quả không được sắp xếp, bởi vì nó sẽ giống như <... order by name .. .>. Tôi đang tìm kiếm một cách đơn giản để tránh quản lý một số trường được phép. –

1

Tôi đã kết thúc với giải pháp mà tôi muốn tránh. Tôi đã thực hiện bản đồ nơi mà chính là những gì người dùng nhìn thấy trong URL và giá trị là cột (s) trong DB mà là sau mệnh đề ORDER BY.

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