我在Bean中存储@NamedNativeQuery的结果,更常见的是查询结果不是唯一的,我也没有覆盖bean的HashCode和Equals,因为我的目标只是填充数据(查询resultSet)而不管那是重复还是不重复。
我只是想知道在非唯一字段上指定@Id可能会产生什么后果?
答案 0 :(得分:3)
任何定义的ID(从RDBMS到Hibernate)都是唯一的。它是识别和区分具体实体的唯一关键。以任何其他方式执行它是一个可怕的反模式,在任何情况下你都不应该考虑它。
如果您需要聚合(“无论是否重复”),请使用聚合。选择不同的,和/或限制,和/或组。
它不会抛出异常这一事实并不能让它变得明智。它将来会咬你。我认为这会产生类似的结果:每当你通过ID加载实体时,它会返回一个随机副本。即使您加载它们的集合,您也可以获得随机副本。每当您更新时,它都会更新该随机副本。这是一个明智的实体身份? - 这就是身份证的目的!
答案 1 :(得分:1)
不可能。 ID必须是唯一的。对于您的情况,您需要一个不是实体的pojo,并通过xml映射值(也许可以使用注释)。查看有关nayive查询的文档