복붙노트

[SPRING] Spring Data JPA를 사용하여 매개 변수를 자동으로 변환합니다.

SPRING

Spring Data JPA를 사용하여 매개 변수를 자동으로 변환합니다.

엔티티 빈에서는 ID가 실제로 유효한지 확인하기 위해 체크섬이 포함 된 사용자 지정 ID 형식을 사용합니다. ID는 ID827391738979처럼 보입니다. 모든 코드가 올바른 ID 만 사용하는지 확인하기 위해 ID 문자열 주위에 코드 래퍼를 만들었습니다.

class ID {
    public ID(String id) {
       // parse and verify ID
    }

    public String toString() {
       return id;
    }
}

모든 코드는이 ID 객체를 사용합니다. 그러나 우리 엔티티에서는 ID를 String으로 정의했습니다.

class SomeEntity {
    @Column
    private String itsID;
}

이제는 Spring-Data-JPA를 사용하여 객체를 쿼리합니다. 그래서 우리는 :

public SomeEntity findByItsID(ID itsId);

문제는 Spring Data JPA가 ID 형식의 매개 변수를 쿼리에 할당하려고 시도하는 반면 쿼리는 물론 String을 기대한다는 것입니다.

Spring Data JPA가 쿼리에 삽입되기 전에 예상되는 유형 (예 : Spring 변환기 등록)으로 매개 변수를 변환 할 수 있습니까? 또는 메소드가 다음과 같이 String을 취하도록해야 하는가?

public SomeEntity findByItsId(String itsId);

차라리 이것을 피하기 때문에 모든 코드가 String 클래스를 사용하는 대신 ID 클래스를 사용할 수 있습니다.

해결법

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

    1.엔티티에서 JPA 2.1 @Convert를 사용하여 사용자 정의 유형을 사용할 수 있으므로 JPA가 변환을 수행합니다 (스프링 데이터 JPA로도 테스트했으며 투명하게 작동했습니다). 참조 :

    엔티티에서 JPA 2.1 @Convert를 사용하여 사용자 정의 유형을 사용할 수 있으므로 JPA가 변환을 수행합니다 (스프링 데이터 JPA로도 테스트했으며 투명하게 작동했습니다). 참조 :

    실재:

    @Entity
    class SomeEntity {
    
        @Column(name = "my_id_column_name")
        @Convert(converter = MyIDConverter.class)
        private ID itsID;
    }
    

    변환기:

    public class MyIDConverter implements AttributeConverter<ID, String> {
    
        @Override
        public String convertToDatabaseColumn(ItStaticDataKey javaKey) {
            // your implementation here
        }
    
        @Override
        public ItStaticDataKey convertToEntityAttribute(final String databaseKey) {
            // your implementation here
        }
    
    }
    

    노트:

  2. from https://stackoverflow.com/questions/22965178/automatically-convert-a-parameter-with-spring-data-jpa by cc-by-sa and MIT license