当前位置: 首页 > 面试题库 >

指定是否延迟加载Spring Data

束新
2023-03-14
问题内容

我在实体中有一个懒惰的访存类型集合。我正在使用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 “])


问题答案:

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



 类似资料:
  • 1、mybatis 是否支持延迟加载? 延迟加载其实就是讲数据加载时机推迟,比如推迟嵌套查询的时机。 延迟加载可以实现先查询主表,按需实时做关联查询,返回关联表结果集,一定程度上提高了效率。 mybatis仅支持关联对象association和关联集合对象collection的延迟加载,association是一对一,collection是一对多查询,在mybatis配置文件中可以配置lazylo

  • 描述 (Description) 延迟加载可应用于图像,背景图像和淡入效果,如下所述 - 对于图像 要在图像上使用延迟加载,请按照给定的步骤进行操作 - 使用data-src属性而不是src属性来指定图像源。 将类lazy添加到图像。 <div class = "page-content"> ... <img data-src = "image_path.jpg" class = "l

  • 问题内容: 我已使用批注将其用于获取计算的属性。我需要的是那些用注解注解的字段/获取器应延迟加载。 这甚至有可能吗? 谢谢 问题答案: 是的。只需使用@Basic(fetch = FetchType.LAZY) 注释属性的字段/ 获取器,然后使用hibernate提供的此ant任务即可为实体类进行字节码检测。否则,将默默忽略该属性的LAZY加载。 该文档包含有关如何使用此ant任务进行字节码检测的

  • 我有以下型号: 在另一个图书馆服务的方法: 只有在启用延迟加载时,它才能正常工作: 如果未启用延迟加载,则不填充用户属性。我想抛出一个异常,如果有人试图使用我的服务没有启用延迟加载。怎么做呢?我试图检查属性

  • 我有两个具有一对多关系的实体: 但当我调用get方法来加载用户信息时,我可以在日志文件中看到检索用户角色的附加查询也被调用。我如何使用spring数据rest防止它?

  • 问题内容: 我在JPA实体中的延迟加载属性有问题。我读过许多类似的问题,但它们与spring或hibernate有关,并且他们的后代不适用或没有帮助。 该应用程序是在Wildfly应用程序服务器上运行的JEE和JPA2.1。有两个实体,DAO会话bean和servlet将它们放在一起: 当我运行此代码时,它失败并显示: 我对WebLogic / JPA1使用了非常相似的模式,并且运行平稳。任何的想