是否有可能在JPA中執行跨數據庫表連接?跨數據庫連接JPA
我在一個數據庫中有一個users
表,它在一個單獨的數據庫中有一個organizations
表的外鍵。兩個數據庫都在同一臺物理機器上。現在,MySQL允許我編寫跨多個數據庫的查詢,但我不確定如何使用JPA執行此操作。
對於Java POJO的註解@Entity
不採用數據庫的名稱,因此無法標記交叉DB關係。
有沒有針對這種情況的解決方法?也許使用本機查詢來加載連接的實體?
是否有可能在JPA中執行跨數據庫表連接?跨數據庫連接JPA
我在一個數據庫中有一個users
表,它在一個單獨的數據庫中有一個organizations
表的外鍵。兩個數據庫都在同一臺物理機器上。現在,MySQL允許我編寫跨多個數據庫的查詢,但我不確定如何使用JPA執行此操作。
對於Java POJO的註解@Entity
不採用數據庫的名稱,因此無法標記交叉DB關係。
有沒有針對這種情況的解決方法?也許使用本機查詢來加載連接的實體?
我們嘗試了以下做法,似乎工作。
1)在@Table註釋
2)創建用於通過在它們所存在的模式杵實體不同ORM文件沒有架構屬性。
3)在每個orm文件中,可以添加一個「my_schema」。
4)包括在persistence.xml
5在各自的PU的ORM文件),如果你在測試過程中需要不同的數據庫,用於測試創建類似的ORM文件,並相應更改架構的價值,包括這些ORM文件在一個單獨的PU中
HTH
你不能。由於每個實體都綁定到一個持久性上下文,並且該上下文被綁定到數據庫。
如果數據庫你指的是同一臺服務器上的模式,你可以做兩件事情
如果兩個模式都在不同的數據庫上,那麼您必須在代碼中手動執行連接。
一個問題給你。你提到的「外鍵」是真正的DB外鍵還是邏輯FK?
如果MySQL允許您編寫跨數據庫查詢的SQL,那麼您可以在JPA的本機查詢中使用此SQL。
我假設你正在使用某種數據庫鏈接機制? 如果是這樣,那麼你應該能夠映射這個。您可以將鏈接數據庫的@Table上的「模式」設置爲鏈接名稱。
即
@Table(name="organizations", schema="[email protected]_db")
+1哇,我不知道。這將使我的前一個項目更輕鬆。謝謝詹姆斯! – Augusto 2011-05-03 08:41:54
這是一個邏輯FK。數據庫是真正獨立的MySQL數據庫,儘管在同一臺物理機器上。 – 2011-05-02 11:57:02
由於上述原因,您將無法進行加入。如果您試圖從不同的應用程序或服務管理的數據庫中讀取數據(如果您正在做與SOA有關的事情),這可能是有意義的。解決方案是在你的代碼中進行連接。 – Augusto 2011-05-02 12:23:48
我採取了第一種方法,它的工作。我也在視圖上測試了連接查詢的性能,在單獨的數據庫的表上測試了相同的性能,結果幾乎相同。 – 2011-05-03 08:21:06