一尘不染

指定是否延迟加载Spring Data

hibernate

我在实体中有一个懒惰的访存类型集合。我正在使用Spring Data(JpaRepository)来访问实体。

@Entity
public class Parent{
@Id
private Long id;

    @OneToMany(mappedBy = "parentId", fetch = FetchType.LAZY)
    private Set<Child> children;
}

我想要服务类和当前实现中的两个功能如下:

  1. 获取父级时,“子级”应为null

    public Parent getParent(Long parentId){
    return repo.findOne(parentId);
    

    }

  2. 提取父项时,应填写“子项”:

     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 “])


阅读 211

收藏
2020-06-20

共1个答案

一尘不染

如果您希望根据用例允许使用同一域模型的不同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

2020-06-20