I have the following query:
select p from Plan as p where p.location = :location order by p.name
The problem is that if there are three plans as follows: Apple bat atom Butter
The following is returned: Apple Butter atom bat
I require the following: Apple atom bat Butter
Spring Data JPA queries, by default, are case-sensitive. In other words, the field value comparisons are case-sensitive.
ilike(), which does a case-insensitive search. Just beware if you're switching from Eq to Like, you'll also get wildcards enabled, so things like underscores in oracle matching any character.
case insensitive (not comparable) (computer science) Treating or interpreting upper- and lowercase letters as being the same.
Another way for case-insensitive matching is to use a different “collation”. The default collations used by SQL Server and MySQL do not distinguish between upper and lower case letters—they are case-insensitive by default. The logic of this query is perfectly reasonable but the execution plan is not: DB2.
For example with Hibernate you can use LOWER function to p.name in ORDER BY:
select p from Plan as p where p.location = :location order by LOWER(p.name)
I assume above is not guaranteed to work with all JPA implementations, because argument to ORDER BY is not one of the following:
If it does not work with JPA implementation you use, you have to use following query:
select p, LOWER(p.name) AS name_order
from Plan as p
where p.location = :location order by name_order
Drawback is that result of the query is list of object arrays, first element in each list being instance of Plan entity and second element to be discarded.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With