【发布时间】:2017-06-23 23:43:44
【问题描述】:
我有一个数据库,其中有一个名为 Car 的表。汽车表是这样的:
+----+------+--------------+-----------+----------+------+
| Id | Name | Desccription | Make | Model | Year |
+----+------+--------------+-----------+----------+------+
| 1 | A | something1 | Ford | Explorer | 2010 |
| 2 | B | something2 | Nissan | Ultima | 2005 |
| 3 | C | something3 | Chevrolet | Malibu | 2012 |
+----+------+--------------+-----------+----------+------+
我网站上的不同页面想要显示不同的信息。有些页面只想显示名称,有些页面只想显示品牌和型号等。
我有一个 api,网络调用它来检索所有这些信息。该 api 使用 JPA 和 QueryDSL 与数据库通信并获取信息。我只想获取该特定页面所需的信息。我正在考虑在我的仓库中实现某种构建器模式,以允许我只检索我想要的东西,但我不太确定如何去做。
例如,我的主页只想显示汽车的名称。所以它将调用HomeController,控制器将调用HomeService,这将调用存储库层,如下所示:
carRepository.getCarById(1).withName().build();
其他一些想要显示品牌和型号的页面会像这样进行回购调用:
carRepository.getCarById(1).withMake().withModel.build();
在 Java/Jpa 中实现此类功能的最佳方法是什么?
【问题讨论】:
-
我建议您从一些基本的 JPA 教程开始,然后随着您对 JPA 的进一步了解,将其构建到您的汽车 API 中。正如它所写的那样,这个问题对于 SO 来说太宽泛了。
-
@AndyGuibert 我们实际上已经有一个 jpa 播放器来获取数据,但问题是我们总是为所有页面检索太多。当我们有一个 getById 方法时,它会检索整个汽车实体,这对于某些页面来说信息太多。因此,我们开始为特定页面编写方法,例如 getCarByIdForHomePage 或 getCarByIdForAdminPage 等。但这很快就会失控,所以我想知道是否有更好的方法
标签: java database jpa architecture