1

I search table with Criteria Query and filter it with name field. i filter records that have name like %user-entered-name%.
then sort result with name column. now i have a problem. i will it sort like following:

  • name (First list records that his name is equal to user entered name)
  • name* (Second list records that his name starts with user entered name)
  • *name* (In the last list records that hist name contains user entered name)

is there any solution for it in jpa.

thanks alot.

Rasoul Taheri
  • 802
  • 3
  • 16
  • 32

1 Answers1

1

One solution is to retrieve additional column called relevance using CASE WHEN statement. It could be defined as following:

c.multiselect(employee.get("name"),
    cb.selectCase()
    .when(cb.equal(employee.get("name"), "user-defined-name"), 3)
    .when(cb.like(employee.get("name"), "user-defined-name%"), 2)
    .when(cb.like(employee.get("name"), "%user-defined-name%"), 1)
    .otherwise(0)
    .alias("relevance"))
Maciej Dobrowolski
  • 11,561
  • 5
  • 45
  • 67