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

Spring Data Rest为集合指定延迟加载

向子安
2023-03-14

我有两个具有一对多关系的实体:

public class User {
    @Id
    @GeneratedValue
    private Long id;
    private String username;
    private String phoneNumber;
    private Timestamp creationDate;
    @OneToMany(mappedBy = "user")
    private List<Role> roles;

}

public class Role {
    @Id
    @GeneratedValue
    private long id;
    @ManyToOne
    @JoinColumn(name = "user_id", nullable = false)
    private User user;

}

但当我调用get方法来加载用户信息时,我可以在日志文件中看到检索用户角色的附加查询也被调用。我如何使用spring数据rest防止它?

共有2个答案

施凡
2023-03-14

由于您使用的是SDR,为了防止在获得用户时加载角色,您可以:

1) 为角色创建存储库。如果有一次检查它是否已导出(@RepositoryRestResource(exported=true)-默认情况下,只需添加不带此参数的注释)。

2) 或在没有角色的情况下进行用户投影:

@Projection(name = "justUser", types = User.class)
public interface JustUser {
    String getUsername();
    String getPhoneNumber();
    Timestamp getCreationDate();
}

然后在你的请求中使用它,像这样:

GET /users?projection=justUser
胡俊美
2023-03-14

将FetchType定义为惰性,如下所示。

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;

默认情况下,manytone的jpafetchtype是EAGER。参考这里

 类似资料:
  • 问题内容: 我以这样一种方式进行了JPA设置:如果我不使用延迟加载,则几乎将加载整个数据库。我也直接在模型上使用序列化,因此有时我需要初始化代理。 我只想在集合上使用延迟加载。急切地获取一些奇异实体的事实就很好了。但是,无论我如何尝试设置集合,我都永远不会得到代理集合,而我总是会得到完全加载的集合。 这是一些示例代码: 所以这里的问题是,当我检查调试器时,答复的persistantBag-list

  • 问题内容: 我以这样一种方式进行了JPA设置:如果我不使用延迟加载,则几乎将加载整个数据库。我也直接在模型上使用序列化,因此有时我需要初始化代理。 我只想在集合上使用延迟加载。急切地获取某些奇异实体的事实就很好了。但是,无论我如何尝试设置集合,我都永远不会得到代理集合,而我总是会得到完全加载的集合。 这是一些示例代码: 所以这里的问题是,当我检查调试器时,答复的persistantBag-list

  • 问题内容: 我在实体中有一个懒惰的访存类型集合。我正在使用Spring Data(JpaRepository)来访问实体。 我想要服务类和当前实现中的两个功能如下: 获取父级时,“子级”应为null } 提取父项时,应填写“子项”: } 从RestController返回“父”实体时,将引发以下异常: org.springframework.http.converter.HttpMessageNo

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

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

  • 问题内容: 我想知道在node.js中使用是否等效于延迟加载? 例如,如果我有一个函数需要代码中其他任何地方都不需要的特定node.js包,那么我最好在该函数内部使用它,以便仅在调用该函数时才包含所需的包。 我还不确定是否会由于缺乏对node.js架构的了解而在性能方面有所改善?我想它每次与服务器的连接都会使用更少的内存。但是,当它必须读取程序包时,它会增加磁盘的I / O吗,还是将其添加到内存中