Hibernate映射具有空值的复合键

19 java hibernate

使用Hibernate,您是否可以创建一个复合ID,其中您映射到ID的其中一列可以具有空值?

这是为了处理具有唯一键的旧表,该键可以具有空值但没有主键.

我意识到我可以在表中添加一个新的主键列,但我想知道是否有任何方法可以避免这样做.

And*_*rov 11

不可以.主键不能为空.

  • 我们的客户提供了一个没有任何主键的视图。对于 Hibernate 我必须定义一个 PK。但唯一唯一的字段组合包括可为空字段。 (4认同)

Rak*_*til 8

您不会收到错误,但 Hibernate 将无法将复合列具有 NULL 值的那些行映射到您的实体。这意味着您得到结果中带有 NULL 值的实体。


Blo*_*ode 6

不幸的是,没有。我要么必须使用解决方法:

我将复合 ID 用于视图(!不是表),其中行可以由 2 列(A,B)精确标识。尽管列之一 (B) 可以具有空值以及正整数。所以我的解决方法是我在视图中创建了一个新的列:“BKey”,并且我的视图被编写为如果 B 为 null,则 BKey 的值为 -1,否则 BKey = B。(只有正整数出现在 B 和 null 中)。我还更改了我的组合 id 实现以使用 BKey 而不是 B。希望它对某人有帮助..