2011-05-02 87 views
4

是否有可能在JPA中執行跨數據庫表連接?跨數據庫連接JPA

我在一個數據庫中有一個users表,它在一個單獨的數據庫中有一個organizations表的外鍵。兩個數據庫都在同一臺物理機器上。現在,MySQL允許我編寫跨多個數據庫的查詢,但我不確定如何使用JPA執行此操作。

對於Java POJO的註解@Entity不採用數據庫的名稱,因此無法標記交叉DB關係。

有沒有針對這種情況的解決方法?也許使用本機查詢來加載連接的實體?

回答

2

我們嘗試了以下做法,似乎工作。

1)在@Table註釋

2)創建用於通過在它們所存在的模式杵實體不同ORM文件沒有架構屬性。

3)在每個orm文件中,可以添加一個「my_schema」。

4)包括在persistence.xml

5在各自的PU的ORM文件),如果你在測試過程中需要不同的數據庫,用於測試創建類似的ORM文件,並相應更改架構的價值,包括這些ORM文件在一個單獨的PU中

HTH

3

你不能。由於每個實體都綁定到一個持久性上下文,並且該上下文被綁定到數據庫。

如果數據庫你指的是同一臺服務器上的模式,你可以做兩件事情

  • 創建的模式之一的觀點,指着桌子上的其他架構。缺點是,您可能需要兩次映射實體(每個模式一次)
  • 使用連接創建視圖並映射您需要的值。缺點是該實體將只能讀取。

如果兩個模式都在不同的數據庫上,那麼您必須在代碼中手動執行連接。

一個問題給你。你提到的「外鍵」是真正的DB外鍵還是邏輯FK?

+0

這是一個邏輯FK。數據庫是真正獨立的MySQL數據庫,儘管在同一臺物理機器上。 – 2011-05-02 11:57:02

+0

由於上述原因,您將無法進行加入。如果您試圖從不同的應用程序或服務管理的數據庫中讀取數據(如果您正在做與SOA有關的事情),這可能是有意義的。解決方案是在你的代碼中進行連接。 – Augusto 2011-05-02 12:23:48

+0

我採取了第一種方法,它的工作。我也在視圖上測試了連接查詢的性能,在單獨的數據庫的表上測試了相同的性能,結果幾乎相同。 – 2011-05-03 08:21:06

4

如果MySQL允許您編寫跨數據庫查詢的SQL,那麼您可以在JPA的本機查詢中使用此SQL。

我假設你正在使用某種數據庫鏈接機制? 如果是這樣,那麼你應該能夠映射這個。您可以將鏈接數據庫的@Table上的「模式」設置爲鏈接名稱。

@Table(name="organizations", schema="[email protected]_db") 
+0

+1哇,我不知道。這將使我的前一個項目更輕鬆。謝謝詹姆斯! – Augusto 2011-05-03 08:41:54