2015-09-11 45 views
-2

是否可以在同一個域模型(實體類)中同時使用組合鍵和主鍵,以便使用組合鍵將一些表(查詢)連接起來,並使用主鍵連接其他表(查詢)?一個表的JPA複合鍵和另一個表的主鍵 - 可能嗎?

我正在處理遺留應用程序,並且我有限制訪問更改底層數據庫。我們的部分查詢需要單行結果,但由於數據庫設計中存在缺陷,導致行數增加。我們可以通過向我們的領域模型之一引入組合鍵來解決這個問題,但這樣做會影響依賴原始主鍵的許多(許多)其他組件。

從我對JPA的理解以及迄今爲止在這方面所做的閱讀中,我不認爲這是可能的,但我認爲這可能值得一試,以便與其他可能遇到類似問題的人聯繫。

+1

如果需要,數據庫表中列的組合一起形成複合主鍵。因此,它們的隱含含義是什麼?「*在同一個域模型中是否可以同時具有組合鍵和主鍵*」? – Tiny

+0

是的。所以,如果我創建一個組合鍵,那麼所有的聯接將開始使用該組合鍵。但是,如果我開始告訴他們使用組合鍵,某些查詢將會中斷。那些將中斷的查詢需要以某種方式繼續使用原始主鍵。我們將Hibernate與JPA結合使用,無論領域模型關鍵是什麼(無論是單列主鍵還是多列組合主鍵),都會自動加入。 –

回答

0

該表只有一個primary key,因此您無法選擇使用哪個primary key。另外,我不明白你爲什麼會在數據庫原始模型和JPA之間存在差異。實際上,獲取單行而不是多行是where子句的任務。

你說你的一些查詢在添加複合pk後失敗了,所以你可能只是以錯誤的方式創建了你的複合pk? 無論如何,這裏是很好的例子或執行復合pk,可能會幫助你: Mapping ManyToMany with composite Primary key and Annotation:

0

也許你應該給你一個不同的看看你的問題。

  1. 如果你的查詢返回多個不同行,那麼你應該能夠使用更具體的WHERE子句來解決這個;

  2. 如果你的查詢返回多個等於行,你應該嘗試DISTINCT子句查詢裏面,例如:

SELECT DISTINCT E從br.com.stackoverflow.EntityË

相關問題