2011-08-17 42 views
0

我將@NamedNativeQuery的結果存儲在Bean中,更常見的是查詢結果不是唯一的,我也沒有重寫Bean的HashCode和Equals,因爲我的目標是隻是爲了填充數據(查詢結果集)而不管是否重複。在hibernate中將@Id字段指定爲非唯一列

我只想知道在非唯一字段上指定@Id會有什麼後果?

回答

1

不可能。 ID必須是唯一的。對於你的情況,你需要一個不是實體的pojo,並通過xml映射這些值(或許也可以使用註釋)。查看有關nayive查詢的文檔

+0

是啊同意id的必須是唯一的,但我想知道我可能會遇到什麼問題,如果該屬性不是唯一的。因爲hibernate不會拋出任何異常 – dpsdce

3

任何定義(從RDBMS到Hibernate)的ID都是唯一的。這是識別和區分具體實體的唯一關鍵。以任何其他方式做它是一個可怕的反模式,在任何情況下,你永遠不應該考慮它。

如果您需要聚合(「無論是否重複」),請使用聚合。選擇不同的和/或限制和/或組。

事實上,它不會拋出異常並不會使它變得明智。它將來會咬你。 Offhand我認爲它會導致類似於:無論何時通過ID加載實體,它都會返回一個隨機副本。即使你加載它們的集合,你也會得到隨機副本。無論何時更新,它都會更新該隨機副本。這是一個明智的實體身份? - 這就是ID的目的!