2016-09-29 83 views
1

我有一個表的列數是可變的(取決於客戶), 所以我尋找一種方法來映射此表與java對象使用JPA /休眠或其他JPA /休眠與動態對象模型

我不能使用POJO,因爲它限於一個穩定的表,所以我想使用Java對象這樣

class MyObject { 
int id; 
Map<String, Object> fields = new Map<String, Object>(); 

public void setId(int id) { 
    this.id = id; 
} 

public void setField(String key, Object value) { 
    fields.put(key, value); 
} 

}

表用於存儲爲MyObject:

TABLE MYTABLE (
ID INTEGER, 
FIELD1 VARCHAR, 
FIELD2 DATE, 
FIELD3 INTEGER 
) 


MyObject myObject = new MyObject(); 
myObject.setId(id); 
myObject.setField("FIELD1" , "hello world"); 
myObject.setField("FIELD2" , new Date()); 
myObject.setField("FIELD3" , 21) 

Action to save myObject in db; 

當然並有可能查詢

+1

如果您不知道自己的模式。你應該去Nosql。例如。 Mongo – cody123

+0

感謝您的回答,但我使用Relationale數據庫(現在是sqlserver)的約束 – OliDem

+0

請參閱動態模型http://docs.jboss.org/hibernate/core/3.3/reference/en/html/persistent-classes .html#persistent-classes-dynamicmodels –

回答

2

Hibernate支持他們稱之爲動態模型。請參閱以下鏈接:

持久實體不一定必須表示爲 POJO/JavaBean類。 Hibernate還支持動態模型(在運行時使用 Maps地圖)。採用這種方法,您不會編寫持久類,只​​能映射文件。

http://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html#dynamic-model

上一頁Hibernate的文檔版本提供一些更多的細節。請參閱:

http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#persistent-classes-dynamicmodels

這裏有一個例子,似乎(從快速脫脂),以允許正常的POJO與動態相結合的字段。

https://www.infoq.com/articles/hibernate-custom-fields

+0

匹配,再次感謝艾倫,我發現這個鏈接還:http://what-when-how.com/hibernate/domain-models-and-metadata-hibernate/ – OliDem