使用 Kotlin 进行 JPA 审计

Seb*_* A. 5 spring hibernate jpa auditing kotlin

我想在 kotlin 数据类中使用 @CreatedDate 注释。所有属性都应初始化为不可变 (val)。问题是,该实现无法处理不可变变量。将不会设置正确的日期并且变量为空。使用可变变量,实现可以设置日期。

例子:

    @Entity
    @EntityListeners(AuditingEntityListener::class)
    data class Test(

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "id", updatable = false, nullable = false)
    val id: UUID? = null,

    val text: String,
    @CreatedDate
    @Column(updatable = false, nullable = false)
    var createdAt: LocalDateTime?,
    ...
Run Code Online (Sandbox Code Playgroud)

kotlin编译器有没有特殊的插件来解决这个问题,或者可以在同一个数据类中使用val和var吗?

Jol*_*717 0

使用valandvar是完全可以接受的。

\n\n

考虑一个示例,您只希望在实例化对象时能够设置属性,但不希望用户稍后能够更改这些属性。

\n\n

这就像允许在构造函数中进行赋值,然后只为该属性提供 getter 方法。

\n\n

如果您显示实际的字节码(将 kotlin 转换为等效的 java),您就会看到这一点。您的属性没有设置方法val

\n\n

Intellij 的说明:

\n\n
Display bytecode: Tools -> Kotlin -> Show Kotlin Bytecode\nOr just: cmd + shift + A (Mac) / ctrl + shift + A (Windows) and type \xe2\x80\x9cKotlin Bytecode\xe2\x80\x9d\n
Run Code Online (Sandbox Code Playgroud)\n