在hibernate中将非唯一列指定为@Id字段

时间:2011-08-17 08:08:02

标签: hibernate annotations

我在Bean中存储@NamedNativeQuery的结果,更常见的是查询结果不是唯一的,我也没有覆盖bean的HashCode和Equals,因为我的目标只是填充数据(查询resultSet)而不管那是重复还是不重复。

我只是想知道在非唯一字段上指定@Id可能会产生什么后果?

2 个答案:

答案 0 :(得分:3)

任何定义的ID(从RDBMS到Hibernate)都是唯一的。它是识别和区分具体实体的唯一关键。以任何其他方式执行它是一个可怕的反模式,在任何情况下你都不应该考虑它。

如果您需要聚合(“无论是否重复”),请使用聚合。选择不同的,和/或限制,和/或组。

它不会抛出异常这一事实并不能让它变得明智。它将来会咬你。我认为这会产生类似的结果:每当你通过ID加载实体时,它会返回一个随机副本。即使您加载它们的集合,您也可以获得随机副本。每当您更新时,它都会更新该随机副本。这是一个明智的实体身份? - 这就是身份证的目的!

答案 1 :(得分:1)

不可能。 ID必须是唯一的。对于您的情况,您需要一个不是实体的pojo,并通过xml映射值(也许可以使用注释)。查看有关nayive查询的文档