我遇到这种情况:
它即将与Spring Data
合作并使用@Entity
这两个建议对我来说完全有效:
DTO projections
Projection interfaces
更多的是,spring-data-examples
同时出现(我知道是出于示例目的):
因此:
注意说明如下:
定义投影的另一种方法是使用值类型DTO(数据 保存字段属性的“传输对象” 应该被检索。这些DTO类型可以完全用于 使用相同的方式投影接口,除了没有代理 发生并且不能应用嵌套投影。
似乎有以下优点:except that no proxying happens
和 no nested projections can be applied
答案 0 :(得分:2)
我认为DTO是第一个使用来自实体的一小组数据的可能解决方案。今天,许多操作也可以通过预测进行,但您需要注意性能。如果您看到这篇Janssen的帖子Entities or DTOs – When should you use which projection?,您会注意到DTO的性能优于阅读操作的预测。
如果您没有表现问题,预测会更优雅。
答案 1 :(得分:1)
DTO方法
Pro
Con
这将导致更多代码,因为您必须使用构造函数和getters / setter方法创建DTO类(除非您使用Project Lombok避免样板 DTO的代码)。
不能应用任何嵌套投影。
投影
Pro
由于仅使用接口而减少了代码。
可以应用嵌套投影
动态投影使您可以编写一种通用存储库方法以返回 根据客户的需求,实体对象中属性的不同子集。
Con
如果需要嵌套或动态投影,则可能需要使用Projection方法而不是DTO方法。
有关详细信息,请参见official Spring doc。