Сущность первичного ключа UUID весенней загрузки не показывает правильный идентификатор после создания

#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 .