Hibernate显示与DB不同的ID

问题描述 投票:0回答:1

我有三个数据库视图,它们在Hibernate中映射为实体。实体处于父子关系中(1个父母(A),2个孩子(B&C))。

其中一个子视图(B)使用Oracle的dbms_utility.get_hash_value()来计算其ID。这是因为它在使用不同ID序列的几个表上执行UNION,因此来自那里的ID可能不是唯一的。

我现在有一个非常令人费解的效果,一个简单的entityManager.find(B.class, id)找不到合适的行。

当我通过加载的父(A)实体查看子项时,我可以看到B中显示的ID与数据库中的ID完全不同。如果我在entityManager.find(B.class, hibernateId)中使用此ID,Hibernate会找到合适的实体。

另一方面,数据库仅在使用ID列中显示的ID时返回一个值(而不是使用ID Hibernate显示的ID)。

子实体C不使用哈希函数,也不显示这种特殊行为 - 这意味着哈希必须负责。

有谁知道为什么?

oracle hibernate
1个回答
0
投票

我们找到了原因:子视图B使用其所有(包含内容)列作为哈希函数的字符串连接。这包括日期字段,在创建字符串时未明确格式化。

因此,当从视图中选择Hibernate时,它显然使用了另一种格式而不是SQL Developer,因此产生了完全不同(但一致)的ID。

显式格式化已用日期字段可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.