我用Hibernate做了一個示例應用程序。我的要求是桌子上沒有主鍵。我只需要從應用程序中選擇查詢。我知道應該有一個主鍵,但我所指的桌子卻沒有它。沒有主鍵休眠
它有大約50K記錄。所以,修改表格以添加ID列沒有看到可行的選項。
它有可能嗎?
我用Hibernate做了一個示例應用程序。我的要求是桌子上沒有主鍵。我只需要從應用程序中選擇查詢。我知道應該有一個主鍵,但我所指的桌子卻沒有它。沒有主鍵休眠
它有大約50K記錄。所以,修改表格以添加ID列沒有看到可行的選項。
它有可能嗎?
我的建議:在表中添加一個自動增量整數PK列。你會對它的速度感到驚訝。
不適用於Hibernate。 It requires a primary key.
因此,修改表中添加ID列沒有看到可行的選項。
這是爲什麼?你的意思是,因爲它已經有五萬條記錄?相信我,那真的不是很多。
即使表不具有代理鍵,並沒有一個主鍵約束,即使你不願意修改表,但仍可能有某種candidate key —也就是說,一些永遠不爲空的列集合,其值唯一標識一條記錄。即使不修改表來強制其唯一性和非無效性,您可以告訴Hibernate這些列形成composite ID。
我找到了沒有主鍵和空值爲表的解決方案。它將在oracle數據庫上運行。也許其他數據庫存在類似的情況。
您應該創建在POJO類新的主鍵:
@Id @Column(name = 「ID」) 私人整數ID;
,並使用createNativeQuery這樣
getEntityManager().createNativeQuery("select rownum as id, .....
本機查詢將生成主鍵,你會得到獨特的效果。
在沒有觸及你的數據庫表的情況下,在這裏提到的答案[Hibernate和沒有PK作品](http://stackoverflow.com/questions/767277/hibernate-and-no-pk)。這是Hibernate實際上不檢查重複的一個例子。 – Sankalp 2014-02-05 12:45:28