我在实体中有一个懒惰的访存类型集合。我正在使用Spring Data(JpaRepository)来访问实体。
@Entity public class Parent{ @Id private Long id; @OneToMany(mappedBy = "parentId", fetch = FetchType.LAZY) private Set<Child> children; }
我想要服务类和当前实现中的两个功能如下:
获取父级时,“子级”应为null
public Parent getParent(Long parentId){ return repo.findOne(parentId);
}
提取父项时,应填写“子项”:
public Parent getParentWithChildren(Long parentId){ Parent p = repo.findOne(parentId); Hibernate.initialize(p.children); return p;
从RestController返回“父”实体时,将引发以下异常:
@RequestMapping("/parent/{parentId}") public Parent getParent(@PathVariable("parentId") Long id) { Parent p= parentService.getParent(id);//ok till here return p;//error thrown when converting to JSON }
org.springframework.http.converter.HttpMessageNotWritableException:无法编写内容:无法延迟初始化角色集合:com.entity.Parent.children,无法初始化代理- 没有会话(通过参考链:com.entity.Parent [ “儿童”]);嵌套的异常是com.fasterxml.jackson.databind.JsonMappingException:无法延迟初始化角色集合:com.entity.Parent.children,无法初始化代理- 没有会话(通过参考链:com.entity.Parent [“ children “])
如果您希望根据用例允许使用同一域模型的不同JSON表示形式,则可以查看以下内容,无需使用DTO即可:
https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in- spring
另外,请参见以下内容中的“ Spring Data REST中的投影”部分
https://spring.io/blog/2014/05/21/what-s-new-in-spring-data- dijkstra#projections-in-spring-data- rest