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

如何使用JPARepository只返回目标实体

曾高杰
2023-03-14

我设置了多个这样的父子实体。

public class Brigade {
  // Ids

  @OneToMany(mappedBy = "brigade", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  @JsonManagedReference
  private List<Battalion> battalionList;

 // other columns
}

public class Battalion {
  // Ids

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "BRIGADE_ID")
  @JsonBackReference
  private Brigade brigade;

  @OneToMany(mappedBy = "battalion", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  @JsonManagedReference
  private List<Company> companyList;

  // other columns
}

public class Company {
  // Ids

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "BATTALION_ID")
  @JsonBackReference
  private Battalion battalion;

  // other columns
}

前端,我有一个页面显示一个营表,供用户选择以查看详细信息。此页面依赖于RESTful API,并将存储库和服务类设置为RESTful API。

public interface BattalionRepository extends JpaRepository<Battalion, Long> { }

public class BattalionService {

  @Autowired
  private BattalionRepository battRepository;

  public List<Battalion> getAllBattalions() {
    return List<Battalion> battRepository.findAll();
  }

  // other stuff
}

我的问题是JPARepository的。findAll()方法不仅返回营条目列表,还返回营链接到的父旅实体,以及每个营包含的所有关联子连。它会使JSON数据膨胀(我不需要表中的所有细节),并使调试时难以读取,更不用说将所有数据转储到客户端的安全问题了。

如何让JPARepository只返回目标实体?

共有1个答案

黄景胜
2023-03-14

通过使用投影,您可以通过声明自己的表示选择性属性的接口并编写自己的查询方法来获取选择性属性。当然,有多种编写接口的方法。看看留档中共享的示例。

 类似资料:
  • 这似乎可行,但我希望有人能证实这一点: 我的实体有一个基类BaseEntity。 然后我有几个实体,比如从BaseEntity扩展的A、B和C。此外,我还有一个定义为: 现在,我似乎可以使用这个存储库单独查询表A、B或C,只需更改返回类型。例如: 将导致仅从表B中选择行的查询。 真的是这样吗?

  • 方法返回空结果。我正在尝试使用Spring-boot、h2数据库和JPA来实现rest服务。 下面是我的 我的文件包括: 实体: 接口:

  • 我正在使用ElasticSearch 7.3来查询一些文档, 我想在查询响应中只返回每个文档的特定字段, 我发现可以使用来实现这一点, 我可以从Kibana使用这个查询来实现这一点- 返回给我正确的数据- 但我无法使用ElasticSearch的节点客户端实现同样的功能- 有人能帮我找到正确的方法来实现我的用例吗? 引用- https://www.elastic.co/guide/en/elast

  • 我想打这个电话并返回一个字符串,但我有这个错误: “java.lang.非法状态异常:块()/块第一()/块最后())正在阻塞,这在线程反应器中不受支持” 我不明白为什么我做错了?WebClient支持异步和同步调用。 这是一个只有3个依赖的springboot项目。 我怎么能像正常的同步调用一样只返回一个字符串? 谢谢。

  • 场景:一个应用程序有多个实体。每个实体表示一个数据库表。所有数据库表都有一个主键列,但列名不同。 实体示例: 服务类示例: 问题:如果我像下面这样声明dao接口: 将参数作为发送到JPararePository中,然后我的方法在服务类中运行良好。 但是Spring不允许在没有列的情况下创建类。所以我必须声明一个ID列。同样,在我的数据库中,每个表都有一个主列,但所有表的该列的名称是不同的。例如,表

  • 我对Meal和MealGroup之间的关系有问题。Hibernate返回给我:"mappdBy引用未知的目标实体属性"。我有两个实体: 我尝试删除@Join Column和mappedBy。已创建其他表,但我想加入该列。 和 谢谢你的帮助。