Hibernate mapping a composite key with null values使用Hibernate,可以创建一个组合ID,其中要映射到该ID的列之一可以为空值吗? 这是要处理具有唯一键的旧表,该键可以具有空值,但不能具有主键。 我意识到我可以在表中添加一个新的主键列,但是我想知道是否有任何方法可以避免这样做。 不。主键不能为null。 不幸的是,没有。我要么不得不使用一种解决方法: 我在视图(!不是表格)中使用了组合ID,在该视图中行可以精确地由2个cols(A,B)标识。尽管cols(B)之一可以具有空值以及正整数。 您不会收到错误,但是Hibernate将无法将复合列的具有NULL值的行映射到您的实体。这意味着您将获得结果为NULL值的实体。 对于复合键(假设数据库允许PK中的空值),您可以具有最多number_of_cols ^ 2-1个包含空值的条目(例如,对于2列的复合键,您可以有3行主键为null的行,第四是不包含空值的PK)。 这是不可取的。您可以使用视图和地图来代替吗?如果您遗留了旧数据,则可以使用COALESCE提供默认值。我们在使用复合键时遇到很多麻烦,我想空值会导致更多问题。 您为什么要这样做?您的复合ID应该映射表的主键,并且在键中放入空值听起来不明智,对吗? 编辑:Hibernate不允许这样做;您可以将属性放置在密钥之外,并稍微调整DAO以在必要时将字段考虑在内。 |