是否可以使用Kotlin值类作为@Id
属性?
- 实体:**
import io.micronaut.data.annotation.*
@JvmInline
value class UserId(val value: Int)
@MappedEntity("users")
data class User(
@field:Id
@field:GeneratedValue
val id: Int = UserId(0),
val name: String
)
- 回购:**
import io.micronaut.data.jdbc.annotation.JdbcRepository
import io.micronaut.data.model.query.builder.sql.Dialect
import io.micronaut.data.repository.CrudRepository
// Repo
@JdbcRepository(dialect = Dialect.POSTGRES)
interface UsersRepo : CrudRepository<User, UserId>
目前,在编译过程中,我得到了以下错误:
error: Unable to implement Repository method: UsersRepo.update(Object entity). No identity is present
当然,使用 * micronaut-data-jpa * 是不可能的,但是 * micronaut-data-jdbc * 呢?
1条答案
按热度按时间o4hqfura1#
据我所知没有,但是,你可以使用类型别名来实现一些"类似的"(可读性方面):
类型别名为现有类型提供替代名称。如果类型名称太长,可以引入其他较短的名称,然后使用新名称。
因此,上述内容将变为:
但是,请注意,* 类型别名不会引入新类型 *。它们等效于相应的基础类型。
例如,当你添加
typealias Predicate<T>
并在代码中使用Predicate<Int>
时,Kotlin编译器总是将其扩展为(Int) -> Boolean
。因此,每当需要通用函数类型时,你可以传递你的类型的变量,反之亦然:参考:Kotlin - Type aliases