2016-09-29 149 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