[SPRING] Spring Data JPA를 사용하여 매개 변수를 자동으로 변환합니다.
SPRINGSpring 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.엔티티에서 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 } }
노트:
from https://stackoverflow.com/questions/22965178/automatically-convert-a-parameter-with-spring-data-jpa by cc-by-sa and MIT license