spring-boot - Spring boot UUID主键实体在创建后不显示正确的ID
问题描述
所以我有以 UUID 作为主键的实体。在我的服务中创建实体后,响应返回错误的 ID。
我的角色实体
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 响应返回 id “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”。你知道为什么它返回错误的 id 吗?谢谢!
解决方案
您正在使用@GeneratedValue
注释并分配UUID.randomUUID()
给id
属性。要么使用一个,要么使用另一个,而不是两者。
如果您希望由持久性提供程序生成 ID,则保留@GeneratedValue
和删除@GenericGenerator
(这是一个 Hibernate 注释)和UUID.randomUUID()
. 如果您想自己执行此操作,请删除@GeneratedValue
and @GenericGenerator
。
推荐阅读
- reactjs - 组件在 react-native 中保持重新渲染
- heroku - Heroku 和电子邮件/Gmail
- html - 如何在 Angular 中更改 ngx-mat-datetime-picker 的宽度和高度?
- assembly - 32位mingw找不到任何符号
- android - CameraX:如何设置 PreviewView 的背景?
- python - 将 xml 文件的条目转换为 pandas 数据框
- javascript - onWheel 反应事件是“落后一步”
- javascript - 获取角度12中嵌套集合的数据
- progressive-web-apps - 是否可以在渐进式 Web 应用程序中实现 DRM?
- python - 如何导出用户可以旋转 360 度的交互式 3D 绘图 (.obj/html)(仅限 Python)