2014-07-23 3 views
1

나는 Criteria Query로 테이블을 검색하고 이름 필드로 필터링합니다. % user-entered-name %와 같은 이름의 레코드를 필터링합니다.
다음 이름 열로 결과를 정렬하십시오. 지금 나는 문제가있다. 내가 것 그 종류와 같은 다음 jpa 주문 확장 방법

  • *name* (그의 이름은 사용자가 입력 한 이름으로 시작 번째 목록 기록)
  • 이름 * (그의 이름은 사용자가 입력 한 이름과 동일 첫 번째 목록 기록)

    • 이름 (마지막 목록에 hist name에 사용자가 입력 한 이름이 들어 있음을 기록합니다.)

    거기에는 jpa에 대한 해결책이 있습니다.

    감사합니다.

  • 답변

    1

    문을 사용하여 관련성이라는 추가 열을 검색하는 것이 한 가지 해결책입니다. 다음과 같이 정의 할 수 있습니다.

    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")) 
    
    +0

    답장을 보내 주셔서 감사합니다. 하지만 어떻게이 질의에 의해 주문을 설정할 수 있습니까? 반환 된 결과의 두 번째 열에는 이름이 없습니다. –

    +0

    @RasoulTaheri는 코드를 –

    +0

    보내 주셔서 감사합니다. –