복붙노트

[SPRING] 스프링 데이터 - null 값을 가진 경우 매개 변수를 무시합니다.

SPRING

스프링 데이터 - null 값을 가진 경우 매개 변수를 무시합니다.

두 개의 매개 변수를 사용하는 스프링 데이터 저장소 인터페이스가 필요합니다. 다음과 같은 행동을하게하는 방법이 있습니까?

MyObject findByParameterOneAndParameterTwo( String parameterOne, String parameterTwo);

두 매개 변수에 값이 있으면 정상적으로 작동하고 두 값 모두에 대해 "AND"를 수행하고 싶습니다.

예를 들어 두 번째 매개 변수가 null 인 경우 ParameterOne 만 검색합니다.

어떤 제안?

해결법

  1. ==============================

    1.저장소 메소드의 이름을 지정하는 것이 가능하지 않을지 모르지만 @Query를 사용할 수 있습니다.

    저장소 메소드의 이름을 지정하는 것이 가능하지 않을지 모르지만 @Query를 사용할 수 있습니다.

    (:parameterOne is null or parameter1 = :parameterOne) and (:parameterTwo is null or parameter2 = :parameterTwo)
    
  2. ==============================

    2.현재 Spring-data-jpa에서는 이것이 불가능합니다.

    현재 Spring-data-jpa에서는 이것이 불가능합니다.

    JIRA 티켓에 관해서는 Spring 팀의 조사 중입니다.

    그러나 해결 방법을 원한다면 간단한 기준 쿼리 예제를 체크 아웃 할 수 있습니다.

  3. ==============================

    3.별도의 클래스로 Repo를 사용할 수 있는지 확실하지 않지만 StringBuilder를 사용하여 옵션 매개 변수로 쿼리를 추가 할 수 있습니다. 이것은 확실히 작동 할 것이다.

    별도의 클래스로 Repo를 사용할 수 있는지 확실하지 않지만 StringBuilder를 사용하여 옵션 매개 변수로 쿼리를 추가 할 수 있습니다. 이것은 확실히 작동 할 것이다.

     StringBuilder queryBuilder = new StringBuilder();
        queryBuilder.append("select p.name from personDemographic p "); 
        Boolean flag = true;
        if(parameterOne != null){
          if(flag){
              queryBuilder.append("where condition...");
                flag=false;
            } 
          }
        if(parameterOne != null){
        if(flag){
         queryBuilder.append("where condition...");
         flag = false;
        }else{
          queryBuilder.append("and condition...");
        }
       Query query = entityManager.createQuery(queryBuilder.toString());
    
  4. from https://stackoverflow.com/questions/43780226/spring-data-ignore-parameter-if-it-has-a-null-value by cc-by-sa and MIT license