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

Java Database Access Builder Patter

单于庆
2023-03-14

我有一个数据库,其中包含一个名为Car的表。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,web调用它来检索所有这些信息。api使用JPA和QueryDSL与数据库通信并获取信息。我只想获取我想要的那个特定页面的信息。我在考虑对我的回购实现某种构建模式,以便我只检索我想要的东西,但我不太确定如何去做。

例如,我的主页只想显示汽车的名称。所以它会调用HomeController,控制器会调用HomeService,它会调用存储库层,如下所示:

carRepository.getCarById(1).withName().build();

其他一些想要显示品牌和型号的页面会像这样进行repo调用:

carRepository.getCarById(1).withMake().withModel.build();

在Java /Jpa中实现这样的东西的最佳方法是什么?

共有1个答案

王伯寅
2023-03-14

如果我对这个问题理解正确的话,您希望为您的实体的不同投影动态构建查询。

在这种情况下,动态实体图就是您想要的(例如,参见:https://www . thoughts-on-Java . org/JPA-21-entity-graph-part-2-define/)。您从一个空的实体图开始,每次调用您的< code>with()方法都只是向图中添加一个字段。

基本查询保持不变,您只需要在调用build()时设置获取图提示(javax.persistence.fetchgraph)(请注意,上面链接中的示例使用加载图而不是提取图;两者之间的细微区别如下所述:对于JPA的实体图,FETCH和LOAD之间的差异是什么?)

 类似资料:

相关问答

相关文章

相关阅读