Как мне перевести сущность в перечисление в JPA? - PullRequest
1 голос
/ 11 июня 2019

У меня есть объект в 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)
}

Можно ли перевести это в перечисление с идентификатором и использовать ту же таблицу user_certificates для хранения перечислений, прикрепленных к сущности с существующим отношением?

1 Ответ

2 голосов
/ 11 июня 2019

Эту же таблицу можно использовать со следующим отображением в классе сущности пользователя:

@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!!)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...