Hibernate映射具有空值的复合键

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

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

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

不可以。主键不能为空。

这是不可取的。 您可以使用视图并映射它吗? 如果您遇到遗留数据,可以使用COALESCE提供默认值。 我们在使用复合键时遇到了很多麻烦,我想零值会导致更多问题。

对于复合键(假设数据库允许PK中的空值),您可以拥有包含空值的最大number_of_cols ^ 2-1个条目(例如,对于2列的复合键,您可以在其主键中具有3行null,第四个是PK没有空值)。

你为什么想这么做? 您的复合ID应该映射表的主键,将空值放入键中听起来不明智,是吗?

编辑: Hibernate不允许这样做; 您可以将该属性放在密钥之外并稍微调整DAO,以便在必要时考虑该字段

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

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

我使用composit Id作为视图(!not table),其中行可以由2个cols确切地标识(A,B)。 虽然其中一个col(B)可以具有空值以及正整数。 所以我的解决方法是我在视图中创建了一个新的col:“BKey”,我的视图被写成好像B为null,然后BKey的值为-1,否则BKey = B.(只有正整数在B中出现并且为null)。 我还改变了我的composit id实现,使用BKey代替B.希望它对某些人有帮助..