#spring-boot #kotlin #spring-data-jpa
Вопрос:
Итак, у меня есть сущность с UUID в качестве первичного ключа. После того, как я создам сущность в своей службе, в ответе будет возвращен неверный идентификатор.
Моя ролевая сущность
package denny.study.stock.entity
import denny.study.stock.util.converter.JsonToMapConverter
import org.hibernate.annotations.CreationTimestamp
import org.hibernate.annotations.GenericGenerator
import org.hibernate.annotations.Type
import org.hibernate.annotations.UpdateTimestamp
import java.util.*
import javax.persistence.*
@Entity
@Table(name = "roles")
class Role {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "id", columnDefinition = "CHAR(36)")
@Type(type = "uuid-char")
var id: UUID = UUID.randomUUID()
@Column
var name: String = ""
@Column
var slug: String = ""
@Column
@Convert(converter = JsonToMapConverter::class)
var permissions: MutableMap<String, Boolean>? = null
@Column(name = "created_at")
@CreationTimestamp
var createdAt: Date = Date()
@Column(name = "updated_at")
@UpdateTimestamp
var updatedAt: Date? = null
}
Мой метод хранения в службе ролей
override fun store(roleRequest: RoleRequest): RoleResponse {
val role = Role().apply {
name = roleRequest.name
slug = roleRequest.slug
permissions = roleRequest.permissions
}
roleRepository.save(role)
return RoleResponse(role)
}
Мой ответ на роль
package denny.study.stock.model.response.role
import denny.study.stock.entity.Role
class RoleResponse(role: Role) {
var id = role.id
var name = role.name
var slug = role.slug
var permissions = role.permissions
}
идентификатор возврата ответа json «f95bddf6-eb22-49bb-b8e6-5eb819603fa9»
{
"code": 200,
"status": "OK",
"data": {
"id": "f95bddf6-eb22-49bb-b8e6-5eb819603fa9",
"name": "Role 1",
"slug": "role-1",
"permissions": {
"asd": true,
"dsa": false
}
}
}
в то время как в БД он хранится как «87596692-7ee9-4ecb-a425-3b1372d901f4». Вы знаете, почему он возвращает неправильный идентификатор? Спасибо!
Комментарии:
1. Не могли бы вы, пожалуйста, проверить выполненную инструкцию SQL. регистрация. level.org.hibernate.type.descriptor.sql.basicbinder=трассировка и ведение журнала. level.org.hibernate.sql=отладка
Ответ №1:
Вы используете @GeneratedValue
аннотацию, а также присваиваете UUID.randomUUID()
id
атрибут. Используйте либо одно, либо другое, а не и то, и другое.
Если вы хотите, чтобы идентификатор был сгенерирован поставщиком сохраняемости, затем сохраните @GeneratedValue
и удалите @GenericGenerator
(что является аннотацией Hibernate) и UUID.randomUUID()
. Если вы хотите сделать это самостоятельно, удалите @GeneratedValue
и @GenericGenerator
.