2012-07-18 33 views
5

Về cơ bản, câu hỏi của tôi cũng giống như thế này, nhưng đối với Java (JBoss) Hibernate: How can we order a column as int using hibernate criteria API?chuỗi Chuyển đổi sang int trong tiêu chí để Hibernate

Tôi muốn tạo ra một sự hạn chế đặt hàng với một dàn diễn viên để int từ một chuỗi cột. Một cái gì đó như

criteria.addOrder(Order.asc("cast(id as int)")); 

Trường hợp ngoại lệ là "Không thể giải quyết thuộc tính: cast (id as int) của [Class]". Tôi đã thử cả hai diễn viên (như) và chuyển đổi (,) với int và số nguyên.

Trả lời

14

Mặc dù chủ đề cũ và có thể là vấn đề đã được giải quyết, tôi sẽ đăng giải pháp. Có lẽ nó sẽ hữu ích trong tương lai cho một ai đó.

criteria.addOrder(new org.hibernate.criterion.Order("anystring", true) { 
      @Override 
      public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { 
       return "cast(id as int)"; 
      } 
     }); 
+1

Giải pháp này hoạt động nếu bạn không muốn chỉ định tăng dần hoặc giảm dần, bởi vì tham số thứ hai được sử dụng trong phương thức toSqlString gốc. Nếu bạn ghi đè nó, bạn phải thêm asc hoặc desc vào cuối chuỗi của riêng bạn. – KarolR

+1

KarolR, đó là lý do tại sao phương thức này được gọi là toSqlString. Bạn có thể viết đơn đặt hàng của riêng bạn như bạn muốn, nhưng bạn nên chỉ định toàn bộ chuỗi đơn đặt hàng. Và một nữa - luôn luôn có hướng cho trật tự, theo mặc định "asc" được sử dụng để "cast (id as int)" thực sự là "cast (id as int) asc", nhưng bạn có thể bỏ qua nó. Bạn có thể chỉ định thứ tự phức tạp, làm thế nào hibernate nên quyết định nơi để đặt hướng, được chỉ định là tham số? – yorlin

+0

nó thực sự là rất hữu ích và bạn chỉ cần lưu tôi từ chi tiêu rất nhiều thời gian để cấu trúc lại mã tiêu chuẩn của tôi như sql chỉ cho vấn đề đặt hàng. +1 cho cả nhận xét và câu trả lời của bạn. – nihirus

3

Nếu cột chứa giá trị số nguyên, giải pháp tốt nhất là ánh xạ nó dưới dạng số nguyên thay vì chuỗi.

Nếu, vì lý do không rõ ràng, điều này là không thể, bạn có thể thêm trường số nguyên được chú thích bằng @Formula("cast(id) as number") trong thực thể và đơn đặt hàng của bạn trên trường này.

+0

Do cuộc gọi chung và có một số bảng có mã định danh chuỗi, nó đã được quyết định chuyển đổi mọi thứ thành Chuỗi. Dù sao, tôi không thể sử dụng chú thích Công thức do lỗi ngoại lệ về xây dựng maven (trong hibernate3-maven-plugin), vì vậy tôi không thể kiểm tra nó và tôi sẽ chỉ để lại vấn đề này trên stand-by . Tks – spnbldk

+1

nó phải là '@Formula (" cast (id là NUMBER (10,0)) ")' – jtomaszk

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