1

Criteria Query でテーブルを検索し、name フィールドでフィルタリングします。%user-entered-name% のような名前を持つレコードをフィルタリングします。
次に、名前列で結果を並べ替えます。今、私は問題を抱えています。次のように並べ替えます。

  • name (最初のリストには、彼の名前がユーザーが入力した名前と等しいことが記録されます)
  • name* (2 番目のリストには、彼の名前がユーザーが入力した名前で始まることが記録されています)
  • *name*(最後のリストには、ユーザーが入力した名前が含まれる履歴が記録されています)

jpaでそれに対する解決策はありますか。

どうもありがとう。

4

1 に答える 1

1

1 つの解決策は、ステートメントを使用して関連性と呼ばれる追加の列を取得することです。CASE WHEN次のように定義できます。

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"))
于 2014-07-23T10:53:27.850 に答える