当前位置: 首页 > 知识库问答 >
问题:

指定是否懒洋洋地加载Spring数据

邵赞
2023-03-14
@Entity
public class Parent{
@Id
private Long id;

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

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

>

  • 获取父级时“children”应为null

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

    获取父级时应填写“children”:

     public Parent getParentWithChildren(Long parentId){
         Parent p = repo.findOne(parentId);
         Hibernate.initialize(p.children);
         return p;
    }
    
    @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
    }
    
  • 共有1个答案

    殷德本
    2023-03-14

    如果您希望根据用例允许相同域模型的不同JSON表示,那么您可以查看以下内容,这些内容将允许您在不需要DTO的情况下这样做:

    https://spring.io/blog/2014/12/02/latest-jackson-integration-informings-in-spring

    或者,请参见下面的“Spring Data Rest中的投影”部分

     类似资料:
    • 我是Spring框架的新手,我知道Spring在启动时会实例化单例bean的默认行为,称为热切实例化。这是一个很好的行为,因为它只在启动时暴露bean实例化中的任何问题。但有时这种行为是不可预料的,因此通过向bean定义中添加lazy init=“true”,可以将实例化推迟到第一个请求。 所以,我想知道我们可以使用什么样的场景来延迟实例化bean?。请举例说明。

    • 我正在寻找一种方法来检索替代单声道,以防原始单声道是空的。我找到的最接近的是,但我的问题是,我无法将lambda表达式传递给它,因此即使Mono具有非空值,也会调用它。这有点像vs。 以下是一个示例:

    • 在Spring中,可以将bean配置为懒洋洋地初始化。Spring批处理作业也是(Spring管理的)bean。也就是说,当我配置类似于

    • 在我看来,这需要一种新类型的Spring ApplicationContext,它支持“热”刷新,但只是为了添加新的bean定义。先前存在的bean定义不会被移除/重新加载,也不会在随后的refresh()调用中由BeanFactoryPostProcessors重新处理,并且先前存在的单例不会被销毁! 这已经存在了吗?。有没有我忽略的更好的解决方案?

    • 我尝试用java-hibernate-spring实现一个服务器REST,它返回一个JSON。 我有一个多对多关系图。 我解释得更好,我有一个供应商,有一个配料列表,每种配料都有一个供应商列表。 我创建了这个表: 然后我有配料模型: 然后我有供应商模型: 服务 供应对象 和IdAbstractObject “无法写入JSON:未能懒洋洋地初始化Role:myPackage.Comprigue.Co

    • 当我试图懒洋洋地读取子实体列表时,我(断断续续地)得到了这个错误。 关于这个错误,我已经浏览了一个关于SO的帖子列表。我所能找到的就是执行EAGER fetch或使用属性。我不想做任何一个,因为他们是反模式。 我使用的是spring-data-jpa。这是一个spring-boot项目。请求来自web层(Rest控制器)