java - JPA手动加载集合

标签 java hibernate jpa jackson spring-data-jpa

我有一个实体持有一个延迟加载的集合(@OneToMany)。到目前为止,一切都很好。如果我加载实体对象的整个列表 (findAll()),我根本不希望加载集合。我不访问该集合,因此我认为在从 REST 端点返回它之前不会加载它,但看起来 Jackson 在将其解析为 JSON 时访问了它。

目前,我迭代整个实体列表并将集合设置为NULL。这似乎是一种非常糟糕的方法,有没有一种方法可以仅使用专门准备的 @Query 手动加载集合,而不自动加载它(无论是 LAZY 还是 EAGER)? @JsonViews 是正确的方法还是应该删除 @OneToMany 注释(我想我会丢失实际加载集合的查询的映射)?还有其他建议吗?

示例代码

@实体

@Entity
public class Entity {
  @OneToMany(targetEntity = Child.class)
  private List<Child> children;

}

Jersey 资源

@GET
@Produces({MediaType.APPLICATION_JSON})
public List<Entity> getAllEntities() {
  List<Entity> entities = entityService.findAll();

  entities.forEach(e-> e.setChildren(null));

  return entities ;
}

Repository = JpaRepository,具有默认的 findAll() 实现。

谢谢

最佳答案

既然您提到了“建议”,我自己也遇到了同样的问题,我决定实现在 API 响应中发送的自定义 DTO。所以我省略了这些集合字段和所有其他我不希望 json 处理器接触的字段。 我确实实现了一组镜像实际持久化实体的 DTO,但可能还有其他一些映射器来完成这项工作

关于java - JPA手动加载集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35131287/

相关文章:

java - 需要帮助了解 mySQL、POJO、hibernate 和 JSP

java - 无法在数据库中保存 clob 数据类型(Struts、Spring、Hibernate)

java - 在 Hibernate 中执行普通 SQL 查询

java - 将泛型与 JPA 标准结合使用

java - Hibernate postgresql 通知功能

java - 这个东西在Java中叫什么?

java - 使用 AWT 组件更改 Java 中的 MenuBar、Menu 和 MenuItem 的颜色

java - 使用 Mail API 从 Swing 应用程序创建 Jar 文件

java - java中的多个json绑定(bind)

java - hibernate 默认值