如何将 @Transient 与缺少支持字段的 Micronaut Data 和 Kotlin 属性一起使用?
How to use @Transient with Micronaut Data and Kotlin properties that lack a backing field?
我正在从 Spring 数据 JDBC 和 Java 转向 Micronaut 数据 JDBC 和 Kotlin,并且在 Kotlin 上使用 @Transient
时遇到问题属性 没有支持字段。
示例代码:
interface Foo {
// @JvmDefault here had no effect on my problem
// @Transient does not compile here
val doodah: Boolean
get() = /* some default implementation */
}
// Bar implements Foo for reasons unrelated to this question, part of an internal "microframework"
@Entity
@Introspected
@Table(name = "bar")
data class Bar(@Id var id: Long /* , more properties */) : Foo {
}
@JdbcRepository(dialect = POSTGRES)
interface BarRepository : CrudRepository<Bar, Long> {
}
在运行时我收到来自 Postgres 的投诉:
org.postgresql.util.PSQLException: ERROR: column child_record_.doodah does not exist
嗯,看起来 Micronaut Data 想要 serialize/deserialize 继承 属性。所以我在 属性 上尝试了 @Transient
,但编译失败:
This annotation is not applicable to target 'member property without backing field or delegate'
关于如何解决这个问题的建议?
interface Foo {
@get:javax.persistence.Transient
val doodah: Boolean
get() = /* some default implementation */
}
我正在从 Spring 数据 JDBC 和 Java 转向 Micronaut 数据 JDBC 和 Kotlin,并且在 Kotlin 上使用 @Transient
时遇到问题属性 没有支持字段。
示例代码:
interface Foo {
// @JvmDefault here had no effect on my problem
// @Transient does not compile here
val doodah: Boolean
get() = /* some default implementation */
}
// Bar implements Foo for reasons unrelated to this question, part of an internal "microframework"
@Entity
@Introspected
@Table(name = "bar")
data class Bar(@Id var id: Long /* , more properties */) : Foo {
}
@JdbcRepository(dialect = POSTGRES)
interface BarRepository : CrudRepository<Bar, Long> {
}
在运行时我收到来自 Postgres 的投诉:
org.postgresql.util.PSQLException: ERROR: column child_record_.doodah does not exist
嗯,看起来 Micronaut Data 想要 serialize/deserialize 继承 属性。所以我在 属性 上尝试了 @Transient
,但编译失败:
This annotation is not applicable to target 'member property without backing field or delegate'
关于如何解决这个问题的建议?
interface Foo {
@get:javax.persistence.Transient
val doodah: Boolean
get() = /* some default implementation */
}