我正在构建一个使用和返回JSON的RESTful Web服务.当我尝试通过服务层从数据库中获取ESRBRating对象时,我遇到了以下堆栈跟踪.但是,当我将Spring Data JPA存储库直接注入控制器并使用它来获取ESRBRating ID时,它可以正常工作.但是,当通过服务层调用时,它不起作用.我在下面提供了堆栈跟踪和代码.有人可以向我解释为什么在通过服务层时会发生这种情况,而不是直接通过Spring Data JPA存储库时会发生这种情况吗?我该如何解决这个问题?
堆栈跟踪
Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
at net.jkratz.igdb.model.ESRBRating_$$_jvst319_0.getId(ESRBRating_$$_jvst319_0.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:466)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:639)
... 76 more
Run Code Online (Sandbox Code Playgroud)
调节器
@RestController
@RequestMapping(produces = "application/json", value="/esrbrating")
public class ESRBRatingController {
@Inject
ESRBRatingService esrbRatingService;
@Inject
ESRBRatingRepository esrbRatingRepository;
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* Returns all ESRB ratings in database
*
* @return List of ESRBRating objects
* @see …Run Code Online (Sandbox Code Playgroud)