2013-07-07 40 views
5

Tôi ràng buộc Các tham số được đặt tên trong câu lệnh HQL, nhưng nó không được điền đầy.Hibernate Tên cột Tham số Ràng buộc

//colname = "AdminsInfo.name"; assume it is from method's input 
//colval = input.getName().toString(); // assume it is from method's input 

String query = "from AdminsInfo where :coln = :colv"; 
Query q = session.createQuery(query); 
q.setParameter("coln",colname); 
q.setParameter("colv",colval); 

System.out.println(q.toString());   

kết quả đầu ra giống như thế này có nghĩa là thông số (coln, colv) không được đặt và trả về 0 bản ghi.

QueryImpl(from AdminsInfo where :coln = :colv) 
Hibernate: select adminsinfo0_.Row as Row1_0_, adminsinfo0_.ID as ID2_0_,adminsinfo0_.Name as Name3_0_, ... where ?=? 

Bất kỳ trợ giúp nào về cách gắn kết tên cột trong báo cáo HQL đều được đánh giá cao. Cảm ơn. Mahdi.

Trả lời

6

Bạn không thể ràng buộc tên cột làm thông số. Chỉ có một giá trị cột. Tên này phải được biết khi kế hoạch thực hiện được tính toán, trước khi ràng buộc các giá trị tham số và thực hiện truy vấn. Nếu bạn thực sự muốn có một truy vấn động như vậy, hãy sử dụng API tiêu chí hoặc một số cách khác để tự động tạo truy vấn.

1

Cố gắng thay thế Truy vấn cho tiêu chí.

Criteria c = session.createCriteria(AdminsInfo.class); 
c.add(Restrictions.eq(colname,colval)); 
c.list(); 
Các vấn đề liên quan