Spring Hibernate不总是获取子数据
我有两个表:Devices和Rules。一个设备可以有多个规则,所以它们之间存在一对多的关联关系。我使用的是Spring+Hibernate+REST,当我获取设备数据时,我不想获取规则数据。当我使用延迟加载时,我遇到了延迟初始化异常。我使用注解进行Hibernate映射。请提供一种方法,在获取设备数据时跳过检索规则数据。\n下面是我的类:\n@Entity\n@Table(name=\"device\")\n@DynamicUpdate\n@SelectBeforeUpdate\npublic class Devices implements Serializable {\n private static final long serialVersionUID = 1L;\n @Id\n @Column(name=\"DEVICE_ID\")\n private Integer deviceId;\n @Column(name=\"DEVICE_DESC\")\n private String deviceDesc;\n @Column(name=\"DEVICE_NAME\")\n private String deviceName;\n @OneToMany(mappedBy=\"device\",fetch = FetchType.LAZY)\n @JsonIgnore\n private List rules;\n public Devices() {\n }\n public Integer getDeviceId() {\n return this.deviceId;\n }\n public void setDeviceId(Integer deviceId) {\n this.deviceId = deviceId;\n }\n public List getRules() {\n return this.rules;\n }\n public void setRules(List rules) {\n this.rules = rules;\n }\n}\npublic class Rules implements Serializable {\n @Id\n @Column(name=\"RULE_ID\")\n private Integer id;\n public Integer getId() {\n return this.id;\n }\n public void setId(Integer id) {\n this.id = id;\n }\n @ManyToOne\n @JoinColumn(name=\"DEV_ID\")\n @JsonIgnore\n private Devices device;\n // getter and setter for device follows\n}\n以下是异常信息:\nSEVERE: Servlet.service() for servlet [mvc-dispatcher] in context with path [/MyWork] threw exception [Request processing failed; nested exception is org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.beans.Devices.rules, no session or session was closed] with root cause\norg.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.beans.Devices.rules, no session or session was closed\n at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:393)\n at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:385)\n at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:378)\n at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:112)\n at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266)\n at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:95)\n at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60)\n at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)\n at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:99)\n at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:219)\n at com.google.gson.internal.bind.ObjectTypeAdapter.write(ObjectTypeAdapter.java:107)\n at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)\n at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96)\n at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60)\n at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)\n at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:99)\n at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:219)\n at com.google.gson.Gson.toJson(Gson.java:600)\n at com.google.gson.Gson.toJson(Gson.java:579)\n at org.springframework.http.converter.json.GsonHttpMessageConverter.writeInternal(GsonHttpMessageConverter.java:199)\n at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:100)\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:222)\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:153)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:165)\n at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:80)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:126)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)\n at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)\n at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)\n at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)\n at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)\n at java.lang.Thread.run(Thread.java:745)