spring - 如何使用 Kotlin 正确查询 Spring JPA 中的实体

标签 spring kotlin spring-data-jpa spring-data

我正在将我的应用程序迁移到最新的 Spring Data,但我正在努力正确地完成它。

假设我有一个只有一种方法的存储库,以便通过名称额外查询我的实体:

@Repository
interface FooRepository : JpaRepository<Foo, Long> {
   fun findByName(name: String): Foo
}

根据文档,在这种情况下 - 如果未找到实体 - EmptyResultDataAccessException将被抛出。

但是,我也希望能够通过 id 查询实体。如果我使用 findById ,结果将是 Optional<Foo> .另一种选择是使用 getOne ,另一方面将导致 EntityNotFoundException如果没有找到。

那么,除了将所有内容移动到 Optional 之外,还有什么办法吗? , 在 Kotlin 中拥有统一的 API?

最佳答案

您应该将问号与您的查询方法的返回类型一起使用作为“等同于”可选:

interface FooRepository : JpaRepository<Foo, Long> {
   fun findByName(name: String): Foo?
}

然后您可以将您的方法用于elvis-operator :

val foo = repo.findByName("bar") ?: Foo("bar")
repo.findByName("bar") ?: throw IllegalArgumentException("foo not found")

更多信息:Kotlin’s java.util.Optional API Equivalents

关于spring - 如何使用 Kotlin 正确查询 Spring JPA 中的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51050269/

相关文章:

java - 使用 Spring Data Rest 时公开所有 ID

java - 如何在 java 中打印完整的 elasticsearch 调试请求

kotlin - Kotlin Lambda不在内部调用代码

android - 匿名 Kotlin 监听器中未解析的引用

java - hibernate get id=0 批量更新从更新 [0] 返回了意外的行数;实际行数 : 0; expected: 1

java - 优化一些后续 Hibernate 加载/保存调用的想法

android - Kotlin View 绑定(bind) java.lang.IllegalStateException : view must not be null inside listener

spring - 如何在 Spring Boot 中选择性地升级依赖项? (样例: Spring Data)

java - 如何使用 spring CrudRepository 仅选择特定字段?

Java 处理 Spring Data 原生查询中的 NPE 投影