当前位置: 首页 > 面试题库 >

使用JPA存储Map

皇甫繁
2023-03-14
问题内容

我想知道是否可以使用批注attributes使用JPA2 将地图持久化到以下类中

public class Example {
    long id;
    // ....
    Map<String, String> attributes = new HashMap<String, String>();
    // ....
}

由于我们已经有一个现有的生产数据库,因此理想情况下,值attributes 可以映射到以下现有表:

create table example_attributes {
    example_id bigint,
    name varchar(100),
    value varchar(100));

问题答案:

JPA 2.0通过@ElementCollection注释可以支持原语集合,你可以将其与java.util.Map集合支持一起使用。这样的事情应该起作用:

@Entity
public class Example {
    @Id long id;
    // ....
    @ElementCollection
    @MapKeyColumn(name="name")
    @Column(name="value")
    @CollectionTable(name="example_attributes", joinColumns=@JoinColumn(name="example_id"))
    Map<String, String> attributes = new HashMap<String, String>(); // maps from attribute name to value

}

另请参见(在JPA 2.0规范中)

  • 2.6 - Collections of Embeddable Classes and Basic Types
  • 2.7 Map Collections
  • 10.1.11 - ElementCollection Annotation
  • 11.1.29 MapKeyColumn Annotation


 类似资料:
  • 问题内容: 我有以下实体类: 然而, 持续的,然后从与JPA 2.2结果数据库读取的实体/在信息丢失 :所述的改变(在所使用的数据库的时间戳)。例如: 我需要使用:我不能使用,因为区域规则会发生变化(无论如何,这也会遭受此信息丢失的困扰)。我无法使用,因为某事发生在世界任何地方,出于准确性原因,我需要它发生时的原始内容。我无法使用,因为用户填写了事件的开始时间(事件就像约会一样)。 要求: 需要能

  • 我正在开发一个迁移软件,它将使用来自REST服务的未知数据。 我已经考虑过使用MongoDB,但我决定不使用它,而是使用PostgreSQL。 读完本文后,我试图在我的SpringBoot应用程序中使用SpringJPA实现它,但我不知道在我的实体中映射。 我试过了,但什么也不懂! 这里就是我所在的地方: 和... 下表: 我该怎么做? 注意:我不想/不需要一个实体来工作。我的JSON将永远是St

  • 我有一个通用实体,我想使用JPA持久化,以便它的通用值存储在单个列中。简化的实体类如下所示: 类型唯一标识泛型值的类,并且允许具有相同类的多个类型: 我没有找到如何使用Hibernate保持这种泛型类的方法。我找到了替代方法和变通方法,但它们在我看来并不理想。我考虑了以下选项: > 将值的类型设置为JsonNode,并将其类型类标记为com。弗拉德米尔恰。冬眠类型json。JsonBinaryTy

  • 我正在尝试使用文本文件的内容在MySQL数据库中创建存储过程: 我使用本机查询执行SQL: 但是它在DROP PROCEDURE上得到一个错误我注释了DROP PROCEDURE,然后它在DELIMITER上得到一个错误基本上,它在第一个分号之后的任何一行上都得到一个错误。 似乎JPA hibernate正在解析我的查询并告诉我它有问题,而不是将纯文本传递到MySQL。 sql在MySQL中运行,

  • 问题内容: 我有许多需要保留到数据库的简单对象类型。我正在使用Spring JPA来管理这种持久性。对于每种对象类型,我需要构建以下内容: 在我看来,有可能用三个基于泛型的类替换每种对象类型的多个类,从而节省了大量的样板代码。我不确定该怎么做,实际上,如果这是个好主意? 问题答案: 首先,我知道我们在这里提高了一些标准,但这已经比没有Spring Data JPA的帮助而编写的代码少得多。 其次,

  • 我有一个springboot项目,为了执行请求,我正在连接到我的mysql数据库。我有一个实体ExportBatch: 我在ExportBatchRepository中定义了一个新方法: 在我的控制器里,我是这样做的: 当我调用“/GetLastBatchsProblemes”时会遇到这个异常:java.lang.ClassCastException:[Ljava.lang.Object;不能强制