2012-03-29 66 views

回答

12

例如使用Hibernate,你可以以在使用LOWER函數p.name BY:

select p from Plan as p where p.location = :location order by LOWER(p.name) 

我上面假設不能保證所有工作JPA實現,因爲ORDER BY的參數不是以下之一:

  1. state_field_path_expression表達式,其值爲實體的可訂購狀態字段或 •一個general_identification_variable
    •一個single_valued_object_path_expression
  2. 計算結果爲同一個實體的狀態相同的狀態字段或 嵌入抽象模式類型爲A state_field_path_expression:通過以下中的一個SELECT子句中指定嵌入類抽象模式類型SELECT子句中的state_field_path_expression
  3. result_variable引用SELECT子句中的可訂購項目,其中指定了相同的 result_variable。這可能是SELECT表達式中的聚合表達式, scalar_expression或state_field_path_expression的結果。 例如,下面的四個查詢是合法的。

如果它不與您使用JPA實現的工作,你必須使用以下查詢:

select p, LOWER(p.name) AS name_order 
from Plan as p 
where p.location = :location order by name_order 

缺點是查詢的這個結果是對象數組列表,每個列表之中第一個元素計劃實體的實例和要丟棄的第二個元素。

+0

您的第二種方法給我錯誤'意外的令牌:下'。這似乎並不重要,我使用LOWER或UPPER,它總是給我一個錯誤。這使得案件對我來說不敏感的排序是不可能的,並且此刻是一個非常大的問題。 – 2015-01-19 14:08:46

+0

您是否解決了區分大小寫搜索的問題? – Monicka 2016-07-21 18:52:09

3

繼獲得由「orderField」不區分大小寫

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); 
CriteriaQuery<MyEntity> cq = criteriaBuilder.createQuery(MyEntity.class); 
Root<MyEntity> root = cq.from(MyEntity.class); 
cq.select(root).where(...).orderBy(cb.desc(cb.upper(duplicate.get(MyEntity_.orderField)))); 
TypedQuery<MyEntity> query = entityManager.createQuery(cq); 
query.getResultList(); 

這就像告訴查詢到的所有字符轉換爲大寫之前排序

+0

你能幫我:如果我使用'join'只是爲了這樣的排序目的'criteria.orderBy(cb.asc(root.join(「joinColumn」)。get(「sortingParam」)))'',你將如何在該表達式中使用'cb.upper'? 'criteria.orderBy(cb.asc(cb.upper(root.join(「joinColumn」)。get(「sortingParam」))))'似乎是錯誤的用法。 – BBerry 2016-04-19 16:55:31

+0

'duplicate.get(MyEntity_.orderField)'從哪裏來? – Benjamin 2016-08-18 12:46:15

0

不區分大小寫的順序進行排序的結果可以用OrderBy註釋通過包裝排序實現用柱LOWERUPPER

@OrderBy("UPPER(firstName) ASC") 
private List<User> members = new ArrayList<User>(); 

休眠生成的SQL以下

SELECT user0_.id AS id1_0_0_, 
     user0_.firstname AS firstname2_0_1_, 
     user0_.lastname AS lastname3_0_1_ 
FROM user user0_ 
WHERE user0_.user_id=? 
ORDER BY upper(user0_.firstname) 
相關問題

 相關問題