带有动态对象模型的JPA / Hibernate

时间:2016-09-29 10:40:59

标签: java hibernate jpa

我有一个表的列数是可变的(取决于客户), 所以我想找到一种方法来使用JPA / Hibernate或其他

将该表映射到java对象

我不能使用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 个答案:

答案 0 :(得分:2)

Hibernate支持他们所谓的动态模型。进一步查看以下链接:

  

持久性实体不一定必须表示为   POJO / JavaBean类。 Hibernate还支持动态模型(使用   运行时的地图地图)。用这种方法,你不写   持久化类,只映射文件。

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