我有以下查詢執行不區分大小寫的順序返回: 蘋果 黃油 原子 蝙蝠JPA:</p> <pre><code>select p from Plan as p where p.location = :location order by p.name </code></pre> <p>的問題是,如果有三個計劃如下: 蘋果 蝙蝠 原子 黃油</p> <p>以下是
我要求如下: 蘋果 原子 蝙蝠 黃油
我有以下查詢執行不區分大小寫的順序返回: 蘋果 黃油 原子 蝙蝠JPA:</p> <pre><code>select p from Plan as p where p.location = :location order by p.name </code></pre> <p>的問題是,如果有三個計劃如下: 蘋果 蝙蝠 原子 黃油</p> <p>以下是
我要求如下: 蘋果 原子 蝙蝠 黃油
例如使用Hibernate,你可以以在使用LOWER函數p.name BY:
select p from Plan as p where p.location = :location order by LOWER(p.name)
我上面假設不能保證所有工作JPA實現,因爲ORDER BY的參數不是以下之一:
如果它不與您使用JPA實現的工作,你必須使用以下查詢:
select p, LOWER(p.name) AS name_order
from Plan as p
where p.location = :location order by name_order
缺點是查詢的這個結果是對象數組列表,每個列表之中第一個元素計劃實體的實例和要丟棄的第二個元素。
繼獲得由「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();
這就像告訴查詢到的所有字符轉換爲大寫之前排序
你能幫我:如果我使用'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
'duplicate.get(MyEntity_.orderField)'從哪裏來? – Benjamin 2016-08-18 12:46:15
不區分大小寫的順序進行排序的結果可以用OrderBy
註釋通過包裝排序實現用柱LOWER
或UPPER
@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)
您的第二種方法給我錯誤'意外的令牌:下'。這似乎並不重要,我使用LOWER或UPPER,它總是給我一個錯誤。這使得案件對我來說不敏感的排序是不可能的,並且此刻是一個非常大的問題。 – 2015-01-19 14:08:46
您是否解決了區分大小寫搜索的問題? – Monicka 2016-07-21 18:52:09