当前位置: 首页 > 知识库问答 >
问题:

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

朱兴学
2023-03-14

我有一个列数可变的表(取决于客户),所以我在寻找一种使用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个答案

钱修雅
2023-03-14

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-dynamic models

这里有一个例子,看起来(通过快速浏览)允许将普通的POJO与动态字段相结合。

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

 类似资料:
  • 我已经看过很多带有页面对象模型的示例Selenium框架,它们通常显示: 如果内容(方法,web元素)在页面对象类中是静态的,并且它们被暴露在驱动程序类的实例中,那么它看起来像: 我看不到通过创建页面对象类的实例得到了什么。后一种方法看起来更干净,它消除了测试中的大量噪音,并且更容易培训缺乏编程技能的无经验自动化测试人员。 在使用后一种方法时是否有任何固有的缺点?我想不出有什么办法,但似乎没有任何

  • 这适用于顶级对象,但不适用于嵌套对象。例如,如果嵌套对象是特殊对象,则仍将其反序列化为公共对象。 我想做的是告诉Jackson:“无论嵌套级别如何,如果ObjType=Special,使用SpecialObject,否则使用GeneralObject”。我研究了多态反序列化,并尝试使用@JSONSubtypes,但无法正确设置该逻辑。如何确保特殊对象被反序列化到适当的类中,即使它们是嵌套的?

  • 问题内容: 昨天我从假期回来工作,在我们的日常工作中,我的队友提到他们正在重构我们Java代码中的所有模型对象,以删除所有的getter和setter并使模型字段成为所有公共对象,从而调用了Demeter之所以这样做是因为 为了促进我们遵守Demeter定律:一个模块不应该知道其操纵的“物体”的内在特性。由于数据结构不包含任何行为,因此它们自然会公开其内部结构。因此,在这种情况下,Demeter不

  • 对于使用Java Spring RestTemplate完成的HTTP请求,我得到一个JSON键值对对象的响应,该对象带有动态键,如下所示。 回应: 如何将响应对象映射到POJO或映射? 我使用RestTemplate如下所示。

  • 模板实体: 工作流实体: 指挥实体:

  • 我正在用查询构建一个存储库,该查询使用一个复杂的类型参数进行筛选,如下所示: 类是一个简单的POJO: null 谢了!