gpt4 book ai didi

spring-boot - 在 Kotlin 中使用 Jpa 注释从基类继承父属性

转载 作者:行者123 更新时间:2023-12-02 13:01:53 27 4
gpt4 key购买 nike

我们所有的 JPA 实体都有一个@Id、@UpdateTimestamp、乐观锁定等......我的想法是创建某种基类女巫,其中包含每个 JPA 实体需要拥有的所有内容,这些内容可以被所有人继承。

open class JpaEntity (

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id : Long? = null,

@UpdateTimestamp
var lastUpdate : LocalDateTime? = null

...
)

我试图找到如何使用这个类(或任何其他解决方案),以便我们团队中的开发人员不需要一遍又一遍地重做相同的输入。

到目前为止,根据 JPA,我的实现没有“标识符”
@Entity
class Car (

@get:NotEmpty
@Column(unique = true)
val name : String

) : JpaEntity()

有没有人对此有一个优雅的解决方案?

最佳答案

您可以使用与我们在 Java 中相同的方式为其他实体创建基类(例如 @MappedSuperclass):

@MappedSuperclass
abstract class BaseEntity<T>(
@Id private val id: T
) : Persistable<T> {

@Version
private val version: Long? = null

@field:CreationTimestamp
val createdAt: Instant? = null

@field:UpdateTimestamp
val updatedAt: Instant? = null

override fun getId(): T {
return id
}

override fun isNew(): Boolean {
return version == null
}

override fun toString(): String {
return "BaseEntity(id=$id, version=$version, createdAt=$createdAt, updatedAt=$updatedAt, isNew=$isNew)"
}

override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as BaseEntity<*>
if (id != other.id) return false
return true
}

override fun hashCode(): Int {
return id?.hashCode() ?: 0
}
}

@Entity
data class Model(
val value: String
) : BaseEntity<UUID>(UUID.randomUUID()) {

override fun toString(): String {
return "Model(value=$value, ${super.toString()})"
}
}

查看我的工作 example .

备注 @field注释 - 没有它 CreationTimestamp/ UpdateTimestamp don't work .

关于spring-boot - 在 Kotlin 中使用 Jpa 注释从基类继承父属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50233048/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com