我有一个实体持有一个延迟加载的集合(@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/