2017-11-15 3 views
0

저희 팀은 Spring Boot, Spring Data, Thymeleaf 및 JPA/Hibernate로 구축 된 웹 앱을 관리합니다.SpringData의 DomainClassConverter는 Hibernate 프록시와 함께 동작해야합니까?

에 의해 발생 : org.springframework.core.convert.ConverterNotFoundException : 우리는 최근 인해 형식 변환 문제를 평가하기 위해 실패 Thymeleaf 템플릿 SpringEL 표현에 문제가 충돌 없음 컨버터는 유형 [COM으로 변환 할 수있는 발견 .xyz.app.model.Employee $$ _ _ jvst7ca_34]을 입력하기 [java.lang.String의]

표현이다 $ {}} {직원 직원 스프링 컨트롤러 모델에 배치 된 엔티티이다. 직원 엔티티는 봄 데이터 저장소에 간단한 호출로 검색됩니다 :

@ModelAttribute("employee") 
public Employee getEmployee(@PathVariable("employeeId") long employeeId) { 
    return employeeRepository.findOne(employeeId); 
} 

디버깅하는 동안, 난 당신이 로그에서 예외 원인에 볼 수있는 개체가 반환 된 직원이 실제로 최대 절전 모드 프록시 것으로 나타났습니다 - _$$_jvst7ca_34

봄 데이터 봄의 GenericConversionServiceDomainClassConverter을 등록하는 @EnableSpringDataWebSupport 주석이있을 때 $ 같은 표현식 {{직원}}에 대한 ID로 엔티티를 변환해야합니다 : Employee 클래스는와 Javassist 접미사가 있습니다. Spring Boot는 자동 구성 클래스 인 SpringDataWebAutoConfiguration을 제공하며 기본적으로이를 가능하게합니다. 이 자동 구성 클래스가 응용 프로그램에서 적용되었음을 확인했습니다.

또한 GenericConversionServiceDomainClassConverter.ToIdConverter을 검색하면 디버깅을 통해 Employee _ $$ _ jvst7ca_34에서 String으로 변환 할 때 확인했습니다. 그러나 DomainClassConverter.ToIdConverter.matches(sourceType, targetType)은 false를 반환하므로 변환기가 사용되지 않습니다. Employee_$$_jvst7ca_34 유형의 Repositories 저장소를 찾을 수 없기 때문에 false를 반환합니다. 디버거에서 Repositories 목록의 유일한 Employee 저장소는 Employee입니다.

DomainClassConverter의 버그입니까? 프록시 저장소를 검색 할 수 없어야합니까? 게으른 콜렉션 (권장 콜렉션 유형)을 가진 엔티티가 프록시로 돌아올 것이기 때문에 프락시는 아주 일반적으로 보일 것입니다. 아니면 우리가 뭔가 잘못하고 있는거야? 어떤 힌트도 매우 감사 할 것입니다!

답변

0

스프링 데이터 코몬스의 버그였습니다. issue이 이제 해결되었으며 이후 릴리스에서는 프록시를 변환 할 수 있어야합니다.

관련 문제