jpa - 如何在 JPA 中将实体转换为枚举?

标签 jpa kotlin enums

我在 JPA 中有一个实体,我有兴趣将其转换为枚举。

我面临的问题是我与该表之间存在关系,该关系由连接表映射。

@Entity
@Table(name = "user")
data class User(
    @ManyToMany
    @JoinTable(
        name = "user_certificates",
        joinColumns = [JoinColumn(name = "user_id")],
        inverseJoinColumns = [JoinColumn(name = "certificate_id")]
    )
    var certificates: List<Certficate> = listOf()
)

这是我有兴趣转换到的枚举,

enum class Certificate(val id: Int) {
  FOO(1),
  BAR(2),
  BAZ(3)
}

是否可以将其转换为具有 id 的枚举,并使用相同的 user_certificates 表来存储附加到具有现有关系的实体的枚举?

最佳答案

同一个表可以与用户实体类中的以下映射一起使用:

@ElementCollection(fetch = FetchType.EAGER, targetClass = Certificate::class)
@CollectionTable(name = "user_certificates", joinColumns = [JoinColumn(name = "user_id")])
@Column(name = "certificate_id")
@Convert(converter = CertificateEnumConverter::class)
var certificates: List<Certificate> = listOf(),

转换器看起来像,

class CertificateEnumConverter : AttributeConverter<Certificate, Int> {
  override fun convertToDatabaseColumn(attribute: Certificate?) = attribute!!.id

  override fun convertToEntityAttribute(dbData: Int?) = Certificate.fromId(dbData!!)
}

关于jpa - 如何在 JPA 中将实体转换为枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56535073/

相关文章:

android - Android应用程序崩溃:retrofit2.HttpException:HTTP 401

java - 在枚举 Java 中使用数组

c# - 如何获取枚举值 ASP.NET MVC

java - Typealias - 在 Kotlin 中组合多个接口(interface)

java - 如果父引用被定义为没有父引用的 ID,则 Hibernate/JPA 一对多关系

java - Hibernate 映射 MySQL SET 类型

java - 在一个事务中组合 JPA 和 JDBC 操作

java - 使用足够多的枚举器和抽象方法创建枚举有多糟糕

java - 使用 JPA 执行查询时出错