繁体   English   中英

Hibernate映射具有空值的复合键

[英]Hibernate mapping a composite key with null values

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

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

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

不可以。主键不能为空。

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM