繁体   English   中英

Hibernate可以用来存储数据的HashMaps而不用类来表示它们的结构吗?

[英]Can Hibernate be used to store HashMaps of data without classes to represent their structure?

我对Hibernate几乎没有经验,尽管之前我在其他语言中使用过类似的持久性库。 我正在开发一个Java项目,它需要一种方法来定义文本配置文件中的“模型”(在MVC意义上),自动生成数据库表,并且(理想情况下)是数据库后端不可知的。 据我所知,一些快速的谷歌搜索,Hibernate是唯一广泛使用的后端不可知的Java数据库库; 虽然我可以在我的模型系统和多个数据库后端之间编写自己的兼容层,但这是我想尽可能避免的调试工作。

我的问题是:Hibernate可以用来存储其结构以带注释的Java类文件以外的其他方式表示的数据,例如带有描述其结构的配置对象的HashMap吗? 如果没有,是否还有其他相对稳定的Java数据库库可以提供此功能?

编辑:这里有一个更清楚的描述我正在努力实现的目标:

我正在写一个数据建模库。 当调用库的某个方法并传递配置对象(从文本文件加载)时,它应该创建一个新的“模型”,并在必要时为该模型创建数据库表。 可以查询库以查找此模型的项目,该项目应返回包含模型字段的HashMaps。 它还应该允许将HashMaps保存到数据库,前提是它们的结构与配置文件匹配。 这些模型都不应该由实际编译的Java类表示。

我想你可以尝试使用JPA提供的@MapKey注释(不是Hibernate @MapKey注释,它是非常不同的!)。

@javax.persistence.OneToMany(cascade = CascadeType.ALL)
@javax.persistence.MapKey(name = "name")
private Map<String, Configuration> configurationMap = new HashMap<String, Configuration>();

我不相信Hibernate会让你有一个地图作为@Entity,但它会让你有一个包含地图字段的自定义类:

@Entity
public class Customer {
    @Id @GeneratedValue public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }
    private Integer id;

    @OneToMany @JoinTable(name="Cust_Order")
    @MapKeyColumn(name"orders_number")
    public Map<String,Order> getOrders() { return orders; }
    public void setOrders(Map<String,Order> orders) { this.orders = orders; }
    private Map<String,Order> orders;
}

(来自Hibernate文档的示例)

此外,您不必使用注释(如果这是您要避免的):Hibernate关系可以通过xml文件描述,并且有实用程序(例如maven插件)可以自动生成必要的java pojo xml。

您的模型是否需要关系数据库? 您可能会考虑使用像Mongo这样的数据库来存储您可以使用JSON表示的任何对象。

您可以将hibernate配置为在没有任何实体类(链接到表的bean)的情况下工作,1。您需要使用xml配置。 代替class使用entity-name而不是<property name="something"使用<property node="something"

  1. 使用entiy-mode创建一个hibernate会话作为map。

您可以使用映射来存储和返回来自db的信息。 请记住,因为你正在使用地图,所以双向映射会遇到困难(这是3.3版本,不确定它是否在以后的版本中得到修复)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM