2014-10-12 2 views
0

으로 직렬화에 할당해야합니다. 그러나 오류는 EAGER와 @ManyToOne 연관 만 만든 후 양방향 @OneToMany를 LAZY로 남겨 둡니다.이드 LAZY @ManyToOne

봄 DATA REST URL에

java.lang.IllegalArgumentException: Id must be assignable to Serializable! Object of class [null] must be an instance of interface java.io.Serializable 
at org.springframework.util.Assert.isInstanceOf(Assert.java:339) 
at org.springframework.data.rest.webmvc.support.RepositoryEntityLinks.linkToSingleResource(RepositoryEntityLinks.java:160) 
at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.getSelfLinkFor(PersistentEntityResourceAssembler.java:203) 
at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.wrap(PersistentEntityResourceAssembler.java:107) 
at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.toResource(PersistentEntityResourceAssembler.java:84) 
at org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController$1.apply(RepositoryPropertyReferenceController.java:141) 
at org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController$1.apply(RepositoryPropertyReferenceController.java:110) 
at org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.doWithReferencedProperty(RepositoryPropertyReferenceController.java:464) 
at org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.followPropertyReference(RepositoryPropertyReferenceController.java:148) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483) 
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689) 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:769) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1125) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1059) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) 
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:497) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:248) 
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:610) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:539) 
at java.lang.Thread.run(Thread.java:745) 

오류와 LAZY @ManyToOne이 작품을 만들려면 : @ManyToOne 주석이

{ 
    "cause" : null, 
    "message" : "Id must be assignable to Serializable! Object of class [null] must be an instance of interface java.io.Serializable" 
} 
+1

가 열린 문제가있는 것으로 - https://jira.spring.io/browse/DATAREST-269 – fortm

답변

1

문제는 이제 1.8 M1 릴리스에서 해결 될 것으로 보인다. 는

"잭슨이 적절하게 프록시를 렌더링 할 수 에 클래스 패스에 잭슨 최대 절전 모드 4 모듈을 추가하기 위해 추가해야합니다.", JIRA에서 언급 한 바와 같이

+1

ackson-datatype-hibernate4 2.4.4를 사용하여 1.8M1 이상의 스프링 데이터 JPA를 사용했습니다. 및 spring-data-rest-webmvc 2.3.0.M1을 사용하십시오. 일부 URL이 작동했지만 전부는 아니지만 관련 질문입니다. ManyToOne 측에서 내용을 제공하는 부분을 발견했습니다. null. 해당 ResourceProcessor가 호출되었지만 관련 리소스에 대한 로그에서 쿼리를 볼 수 없습니다. 마침내 @AccessType (Type.PROPERTY)이있는 OneToMany Side의 엔티티에서 @JsonIgnoreProperties ({ "hibernateLazyInitializer", "handler"})로 이동했습니다 – fortm

+0

http://stackoverflow.com/questions/27647672/blank-screen-even- ~ many-one-lazy-associated-resources- – fortm

+0

은 봄 부팅 1.3.RELEASE에서 또는 스프링 데이터 jpa 종속성에 대한 항목을 추가해야합니다. –

0

Fetch에서/API/사용자/2/질문 선택 사항이므로이 문제에 대해 신경을 써야합니다. @ManyToOne 어노테이션은 다 대일 다중성을 갖는 다른 엔티티 클래스에 대한 단일 값 연관을 정의합니다. 그래서 다음 시나리오를 시도하십시오.

@ManyToOne 
@JoinColumn(name="childTable_id", nullable = false, referencedColumnName="id") 

당신이 게으른 초기화와 함께 그래서이 시도하는 것이 작업 할 경우

,

@ManyToOne(fetch=FetchType.Lazy) 
@JoinColumn(name="childTable_id", nullable = false, referencedColumnName="id") 
+0

이 도움이되지 않았고 이미 referencedColumnName로 제자리에 JoinColumn 위에 있었고, 내가 같은 오류가 발생, LAZY에서 EAGER로 변경하는 것은 부작용이 있습니다. 필요하지 않을 때 조인이 수행됩니다. – fortm