[SPRING] Spring 데이터 REST @Idclass가 인식되지 않습니다.
SPRINGSpring 데이터 REST @Idclass가 인식되지 않습니다.
아래에 EmployeeDepartment라는 엔티티가 있습니다.
@IdClass(EmployeeDepartmentPK.class) //EmployeeDepartmentPK is a serializeable object
@Entity
EmployeeDepartment{
@Id
private String employeeID;
@Id
private String departmentCode;
---- Getters, Setters and other props/columns
}
Spring Data Repository는 아래와 같이 정의되어 있습니다.
@RepositoryRestResource(....)
public interface IEmployeeDepartmentRepository extends PagingAndSortingRepository<EmployeeDepartment, EmployeeDepartmentPK> {
}
또한 String에서 EmployeeDepartmentPK로 변환하도록 등록 된 변환기가 있습니다.
ID가 employeeID = "abc123"이고 departmentCode = "JBG"인 엔티티의 경우 SDR 인터페이스가 호출 될 때 사용할 ID가 abc123_JBG라고 기대합니다. 예를 들어, http : // localhost / EmployeeDepartment / abc123_JBG는 결과를 가져 와서 실제로 가져와야합니다.
그러나 PUT을 사용하여 엔티티를 저장하려고하면 Spring Data Commons의 BasicPersistentEntity 클래스에서 사용할 수있는 ID 속성의 값이 departmentCode에 대한 abc123_JBG. 이것은 잘못된 것입니다. 이것이 예상 된 행동인지 확실하지 않습니다.
도와주세요.
감사!
해결법
-
==============================
1.현재 스프링 데이터 REST는 단일 필드로 표현되는 복합 키만 지원합니다. 즉, @EmbeddedId 만 지원된다는 의미입니다. 나는 그것을 고칠 DATAJPA-770을 신청했다.
현재 스프링 데이터 REST는 단일 필드로 표현되는 복합 키만 지원합니다. 즉, @EmbeddedId 만 지원된다는 의미입니다. 나는 그것을 고칠 DATAJPA-770을 신청했다.
@EmbeddedId로 전환 할 수 있다면 URI에서 복합 식별자를 표현하는 방법과 경로 세그먼트를 ID 유형의 인스턴스로 다시 변환하는 방법을 Spring 데이터 REST에 알려줘야합니다. 이를 위해 BackendIdConverter를 구현하고 Spring 빈으로 등록하십시오.
@Component class CustomBackendIdConverter implements BackendIdConverter { @Override public Serializable fromRequestId(String id, Class<?> entityType) { // Make sure you validate the input String[] parts = id.split("_"); return new YourEmbeddedIdType(parts[0], parts[1]); } @Override public String toRequestId(Serializable source, Class<?> entityType) { YourIdType id = (YourIdType) source; return String.format("%s_%s", …); } @Override public boolean supports(Class<?> type) { return YourDomainType.class.equals(type); } }
-
==============================
2.@EmbeddedId를 사용할 수 없다면, 여전히 @IdClass를 사용할 수 있습니다. 이를 위해서는 Oliver Gierke가 대답 한대로 BackendIdConverter가 필요하지만 도메인 유형에 대한 조회를 추가해야합니다.
@EmbeddedId를 사용할 수 없다면, 여전히 @IdClass를 사용할 수 있습니다. 이를 위해서는 Oliver Gierke가 대답 한대로 BackendIdConverter가 필요하지만 도메인 유형에 대한 조회를 추가해야합니다.
@Configuration public class IdClassAllowingConfig extends RepositoryRestConfigurerAdapter { @Override public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { config.withEntityLookup().forRepository(EmployeeDepartmentRepository.class, (EmployeeDepartment ed) -> { EmployeeDepartmentPK pk = new EmployeeDepartmentPK(); pk.setDepartmentId(ed.getDepartmentId()); pk.setEmployeeId(ed.getEmployeeId()); return pk; }, EmployeeDepartmentRepository::findOne); }
}
from https://stackoverflow.com/questions/31816468/spring-data-rest-idclass-not-recognized by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] JSF 2, Spring Security 3.x 및 Richfaces 4 ajax 요청에 대한 세션 시간 초과시 로그인 페이지로 리디렉션 (0) | 2019.01.03 |
---|---|
[SPRING] Spring @ 트랜잭션 주석이 무시되었습니다. (0) | 2019.01.03 |
[SPRING] 스프링 부트 응용 프로그램이 Glassfish 4.1에 배포되지 않음 (0) | 2019.01.03 |
[SPRING] 스프링 보안 - 요청 매개 변수가있는 URL은 무시됩니다. (0) | 2019.01.03 |
[SPRING] Maven과 Spring을 이용한 프로젝트 제어 : Maven 프로파일을 사용하여 Spring 설정 파일을 설정하는 방법은 무엇입니까? (0) | 2019.01.03 |