Kotlin JPA 实体 ID

Ond*_*hal 7 jpa kotlin

什么是定义 JPA 实体 ID 的“kotlin 方式”?

@Entity
data class User (
        @Id @GeneratedValue
        var id: Long? = null,
        ...
)
Run Code Online (Sandbox Code Playgroud)

或者有没有更好的方法来避免可空 ID?

phi*_*sch 10

您可以使用 0 值而不是空值。

@Entity
data class User (
        @Id @GeneratedValue
        var id: Long = 0,
        ...
)
Run Code Online (Sandbox Code Playgroud)

自动生成仍应找到下一个序列。

Kotlin 编译为 Java,它同时具有原始类型long和类Long

根据第11.1.21Id 注释中Java 持久性规范, 两者都可用于 Id:

应用 Id 注释的字段或属性应该是以下类型之一:任何 Java 原始类型;任何原始包装类型;java.lang.String; java.util.Date; java.sql.Date; java.math.BigDecimal; java.math.BigInteger[109]。

使用类比原始类有优势,因为null它具有更明确的含义。但是从规范来看,两者都是可能的,你必须决定你喜欢 Kotlins nullsafety 而不是 jpa 风格的天气,或者相反。

  • 但在 /sf/ask/1429521481/ 和 /sf/ask/247505401/键/3537407#3537407 人们倾向于喜欢空变体。那么这真的是_首选_方式还是_可能_方式? (2认同)