#hibernate #kotlin #jpa #composite-primary-key
Вопрос:
Я не уверен, в чем причина, по которой этот код создает новую таблицу. Предполагается LockDatabaseRecordKeyId
, что это составной ключ LockDatabaseRecordKey
сущности, но во время сборки он автоматически создает другую таблицу.
@Embeddable
open class LockDatabaseRecordKeyId : Serializable {
@Column(name = "database_record_id")
lateinit var databaseRecordId: UUID
@Column(name = "key_id")
lateinit var keyId: UUID
override fun equals(other: Any?): Boolean {
if (other == null) return false
return (other is HouseKeyId) amp;amp; other.databaseRecordId == this.databaseRecordId amp;amp; other.keyId == this.keyId
}
override fun hashCode(): Int {
return "${databaseRecordId}.${keyId}".hashCode()
}
}
и это LockDatabaseRecordKey
сущность
@Entity
@Table(name = "lock_database_record_keys",
uniqueConstraints = [
UniqueConstraint(columnNames = arrayOf("database_record_id", "key_id"))
]
)
open class LockDatabaseRecordKey
{
// No column is generated for this value
@EmbeddedId
lateinit var id: LockDatabaseRecordKeyId
@MapsId("databaseRecordId")
@ManyToOne(targetEntity = LockDatabaseRecord::class, fetch = FetchType.LAZY, cascade = [CascadeType.PERSIST, CascadeType.REMOVE])
@JoinColumn(name = "database_record_id", referencedColumnName = "id", insertable = false, updatable = false)
@JsonIgnore
lateinit var lockDatabaseRecord: LockDatabaseRecord
@MapsId("keyId")
@ManyToOne(targetEntity = Key::class, fetch = FetchType.LAZY, cascade = [CascadeType.PERSIST, CascadeType.REMOVE])
@JoinColumn(name = "key_id", referencedColumnName = "id", insertable = false, updatable = false)
@JsonIgnore
lateinit var key: Key
@ManyToOne(targetEntity = Lock::class, fetch = FetchType.LAZY, cascade = [CascadeType.PERSIST, CascadeType.REMOVE])
@JsonIgnore
lateinit var lock: Lock
По какой-то причине он создает таблицу lock_database_record_lock_database_record_keys
Ответ №1:
Я думаю, вы забыли сделать пометки @OneToMany(mappedBy = "lockDatabaseRecord")
на lockDatabaseRecordKeys: Set<LockDatabaseRecordKey>
поле в LockDatabaseRecord
.