spring - 休眠 UUID 与字符串行为 - 类似的 ID 加载为相同的实体,第二个实体被忽略/覆盖 - 冲突
问题描述
最近有同事String
在我们班把ID类型从UUID改成了UUID,见下图:
原来的
public class EventEntry {
private @Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
//@Column(columnDefinition = "RAWUUID RAW(16)")
String id;
修改的
public class EventEntry {
@Id
// @GeneratedValue(generator = "uuid2")
// @GenericGenerator(name = "uuid2", strategy = "uuid2")
//@Column(columnDefinition = "RAWUUID RAW(16)")
private UUID id;
我们现在看到行为发生了一些变化,特别是 2 个变化。
首先是数据库中的 ID 已从 eg 更改
a656944f-0b1f-4b0e-b3d6-cfc22c64e282
为
2166942B104D4846A2EAFEE7BC4C8866
第二个更改涉及非常相似的 ID。我们进行了一些手动编辑/插入,并且有 2 个 ID 非常相似的事件:
bad5b19f-479c-4a99-a814-306e7289ea53
对比
bad5b19f-479c-4a99-a814-306e7289ea54
我们的 JPA 查询现在将这两行加载为同一个实体,特别是带有bad5b19f-479c-4a99-a814-306e7289ea54
. 似乎存在某种冲突 - 我怀疑这是因为手动插入的与原始的非常相似,并且没有遵循有效的 UUID 算法。
有人可以证实这一点并解释其背后的机制吗?为什么系统会默默地失败并且基本上将具有非常相似 UUID 的 2 行视为同一行......(它完全忽略了数据库中实际第二行中的信息)?
解决方案
推荐阅读
- mysql - Windows(R) 下的 MySQL WorkBench Unicode 地狱
- c# - 如何在 ASP.net 中访问对象标记中的 ActiveX 控件的事件
- c# - 有没有办法在 GUILayout.Button 内的 EditorWindow 中使用 EditorGUILayout.LabelField?
- python - Python selenium scraper 在 Windows 上完美运行,但在 raspian raspbian 上却不行
- firebase - Firebase Firestore 查询返回旧数据
- python - Discord.py:json.decoder.JSONDecodeError:预期值:第 1 行第 1 列(char 0)
- sql - 使用 FIRST_VALUE 用前面的非 NULL 值填充 NULL 值
- azure - 从 REST API 或 PowerShell 获取 Azure Web 应用实例的 VM 名称
- sql - 为简单的 SQL 查询创建前端/GUI 的方向?
- c++ - 模棱两可的重载函数仅因参数的模板形参不同