2014-01-16 109 views
0

我在兩個數據庫中有相同的一組表。但是這個特定的表格有不同的列,因爲有一些法律上的限制。那麼如何讓相同的.hbm,pojo類在兩種不同類型的表中使用相同的代碼進行更新。而不是2會議工廠將解決問題。由於我的問題不是連接到2 dbs。但處理CRUD操作。休眠表在不同的數據庫中有不同的列

我在兩個數據庫中有一個表。

比方說EMPLOYEE

In DB1 

NAME 
ADDRESS 
DEPT 
AGE 
QUALIFICATION 
EXPERIENCE 

在DB2

NAME 
ADDRESS 
DEPT 

在那裏。然後如何處理Hibernate操作。

注意:我無法更改數據庫。

問題不是關於連接到兩個數據庫。

+2

請您詳細說明要求。我不太明白你想要達到或預防的是什麼。你有沒有映射到任何一個表的實體?有不同表格的目的是什麼?它需要成爲一個單一的實體嗎?和其他相關信息,你可以提供。 – kostja

+0

在這種情況下,您將需要2個會話功能。 –

+0

我在兩個數據庫中有相同的一組表。但是這個特定的表格有不同的列,因爲有一些法律上的限制。那麼如何讓相同的.hbm,pojo類在兩種不同類型的表中使用相同的代碼進行更新。而不是2會議工廠將解決問題。由於我的問題不是連接到2 dbs。但處理CRUD操作。 – kumar

回答

2

postgresql,使用表註釋的模式屬性,這可以通過加入表繼承來完成:

@Entity 
@Table(schema = "`DB2`", name="BASE_EMPLOYEES") 
@Inheritance(strategy = InheritanceType.JOINED) 
public class BaseEmployee { 

    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    protected Long id; 

    private String name; 
    private String address; 
    private String department; 

    ... 
} 

@Entity 
@Table(schema = "`DB1`", name = "FULL_EMPLOYEES") 
public class FullEmployee extends BaseEmployee { 

    private Integer age; 
    private String qualification; 
    private String experience; 

    ... 

} 

我已經在postgresql數據庫進行了測試,這種配置工作正常,沒有需要定義多個實體管理器工廠和數據源。

注意:在其他數據庫中,您可能不需要模式名稱周圍的引號。

萬一數據庫支持同義詞或等同概念:

在例如甲骨文的情況下,最方便的解決方案是在數據庫的水平,通過使在一個模式可見的表另一個模式通過public synonyms

如果每個環境不同的架構名稱:

在這種情況下,設置在不同的orm.xml中文件的架構名稱,並配置您的構建過程中只放這些文件中的一個視類路徑環境,看到這answer

+0

因此,在這種情況下,我應該使用BaseEmployee或FullEmployee的pojo什麼是我應該用於區分的標準。因爲我不能只依賴模式名稱,因爲我有3個不同的代碼和數據庫階段服務器。 – kumar

+0

對於某些服務,由於法律原因您無法返回某些機密數據,因此您在查詢中使用BaseEmployee。如果您需要完整的數據,則針對FullEmployee進行查詢。在服務層中,根據服務的業務邏輯,您總是可以知道是否需要一個或另一個,因此您可以選擇相應的方法並在代碼中使用其中一個或另一個,這是正確的嗎?如果不是,你能提供原因不是這樣的原因。 –