我正在使用 Spring Data 存储库并在文档中看到以下声明:
按照这种方式很容易导致混淆,并且不鼓励这样做,因为如果 ID 类型和 Id 属性的类型有偏差,您很快就会达到类型限制。
我理解存储库接口需要指定域类型及其标识符类型作为通用参数。但我对“命中类型限制”这个短语不太清楚。
这是否意味着如果存储库中声明的 ID 类型与我的域对象中名为“Id”的属性的类型不匹配,我将遇到编译时类型不匹配或运行时错误?
在这种情况下,“类型限制”到底是什么?它与 Java 泛型系统的限制有关吗?还是指另一种约束?
标准
CrudRepository
提供了类似以下方法它还允许派生方法,例如
这里
SomeType
可能有T
,,还有更多,并且Optional<T>
是您的实体的一些属性。List<T>
someProperty
现在您可以定义一个域模型,其中有一个名为的
id
属性,它不是实体的ID 。查询派生不起作用,因为它已被声明与实际ID
findById
一起使用,无论它的名称是什么。然后您可以做的是
findById
使用@Query
注释来创建自己的注释。但是如果你这样做,并且ID属性与你的属性类型不同
id
(或者你的自定义findById
应该返回不同的类型Optional<T>
),你可能会很容易遇到以下情况:a)
findById
与您想要的名称不同。b) 代码无法编译,因为类型导致了不可接受的方法重载/覆盖的变体。