【发布时间】:2022-07-15 16:31:10
【问题描述】:
我有一个如下声明的自定义存储库(用 Kotlin 编写):
interface FooRepository : JpaRepository<Foo, Int> {
fun findByFoo(foo: String): List<Foo>
fun findByBar(bar: String): List<Foo> {
//custom implementation
}
}
data class Foo(var id: Int, var foo: String, var bar: String)
这两种方法都满足 JPA 存储库的命名约定,但我想自己实现第二种方法 (FooRepository.findByBar)。如何防止 JPA 为其创建查询?
请注意,我的自定义实现涉及计算逻辑,因此允许自定义查询的 @Query 注释不符合我的要求。
此外,在实际情况下,这样做是必要且合理的,因此如果您试图建议“更好”的设计模式,例如将实现放在服务层等,请不要发布您的答案或评论。
【问题讨论】:
-
如果您想禁用查询创建,那么您只需打破该方法的 Spring 命名约定,因此不要将
findByBar命名为searchByBar或fetchByBar之类的名称 -
@NikolaiShevchenko 感谢您的解决方案,但效果不佳。当我将它重命名为
fetchByBar时,我仍然得到一个QueryCreationException,说:没有为类型'Foo' 找到属性'fetchByBar'!