在Spring/Hibernate組合中使用多個數據庫「模型」的做法是什麼?一個代碼庫中的Spring,Hibernate和多個模式
希望對我有點困擾的問題有所幫助,因爲我不是Spring/Hibernate的專家!
我們正在開發一個到目前爲止已經按照其第一個客戶的規範構建的web項目。所有的數據庫表都映射到POJO,我們使用Hibernate Annotations。非常簡單,該項目是一個CRUD應用程序,允許最終用戶通過前端更新數據庫信息。
我們現在需要支持一個新客戶,但這個客戶的規格略有不同;我們將更改許多表的列和數據類型。
我們不希望組合成一個表,因爲這會使數據庫有大量空列(每個客戶在某個表中會有10個以上的唯一列)。
我們可以很容易地處理前端,因爲我們只是從JSON轉換到JSON,並且前端已從頭開始實施。但是後端有點複雜。
我們已經嘗試了一個原型,在運行時重寫兩個表;我們轉換兩個對應的模式類接口和實現每個客戶的具體類,經由Spring配置加載,例如用於「產品」表,我們試圖:
package com.mycompany.generic.model;
public interface Product
然後
package com.mycompany.customera.model;
@Table(name="products")
public class CustomerAProduct implements Properties {
String colour;
int weight;
}
或
package com.mycompany.customerb.model;
@Table(name="products")
public class CustomerBProduct implements Properties {
String colour;
int volume;
Double price;
}
..where春負荷,作爲運行選項,com.mycompany.customera或custome rb,具體取決於配置,以及任何客戶特定的驗證/服務類別以處理新的POJO。你看到底層的列可以不同。
不過,我毫不猶豫地推銷到實現這一點,因爲..
- 幾乎每一個模型類將需要轉換的,每個客戶的執行,而不是僅僅是不同的人。這是因爲我們在模型類中有許多連接(OneToMany等),Hibernate不允許你連接到一個接口(例如HHH-4338)
- 某些類型的util/factory需要生成類的新實例,用來做新屬性我們不知道是否使用新CustomerAProperties()或新CustomerBProperties()(出於同樣的原因,我們不能用TargetEntity解決上述問題,因爲這需要一個.class文件不能在代碼中設置)
這些似乎很主要的缺點,所以我試圖研究一個更好的方法來做到這一點。我們可以通過Maven構建每個客戶,但是我不確定如何在本地開發時不會破壞Eclipse的情況下實現此功能。
或者,有沒有其他方法,我不知道?
預先感謝什麼任何建議或指針研究等