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

JPA:持久化包含原始“key”值的映射

叶鹭洋
2023-03-14

我需要使用JPA存储一个复杂的树状对象结构。

有一个“顶级”类A,因此我可以在其上执行CASCADE. ALL,但我对类B的子对象和HashMap字段有问题。

映射的“键”是对象本身的哈希代码,存储为“值”。

当我级联持久化一个对象B时,数据库中的“键”列总是“null”(为什么?),即使对象有一些键值对。

我尝试了@MapKey之类的方法,但当我稍后从数据库加载对象时,键值不再是hashcode,而是自动生成的id(对我来说没有用处)。

我也尝试过为映射使用@ElementCollection,但随后出现了一个同步错误(我认为这是因为我只从顶级类和一些objectd相互指向对方触发整个persist)。

@Entity
public class B
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @OneToMany(cascade = CascadeType.ALL)
    //Tried @MapKey or @ElementCollection
    public Map<Integer, OtherEntity> otherEntities;

谢谢你的帮助亚历克斯

共有1个答案

吕向阳
2023-03-14
@MapKey(name="hashField")

哈希值必须显式存储在其他ntity.hash字段中。映射键用于告诉其他对象属性中的哪个用作键值

 类似资料:
  • 主要内容:JPA级联持久化示例,输出结果级联持久化用于指定如果实体持久化,则其所有关联的子实体也将被持久化。 以下语法用于执行级联持久性操作 - JPA级联持久化示例 在这个例子中,我们将创建两个相互关联的实体类,但要建立它们之间的依赖关系,我们将执行级联操作。 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,其中包含属性:,,以及标记为级联规范的类型的对象。 文件: StudentEntity.java - 第2步:

  • 主要内容:1.AOF日志的影响,2.对AOF重写和RDB的影响,3.总结,4.如何避免大 KeyRedis 的持久化方式有两种:AOF 日志和 RDB 快照。 1.AOF日志的影响 Redis 提供了 3 种 AOF 日志写回硬盘的策略 Always,这个单词的意思是「总是」,所以它的意思是每次写操作命令执行完后,同步将 AOF 日志数据写回硬盘; Everysec,这个单词的意思是「每秒」,所以它的意思是每次写操作命令执行完后,先将命令写入到 AOF 文件的内核缓冲区,然后每隔一秒将缓冲区

  • 谢谢 ----更新----

  • 尝试获取父实体(Msg)的实体,其中父PK (msg_id)是子实体中的FK时,尝试保持子实体(MsgRetry)时出错。 错误,如:org.hibernate.id.IdentifierGenerationException:试图从null一对一属性分配id 父实体,不需要知道子实体(至少我认为它不需要知道)。一旦子实体被持久化,我就会尝试也持久化父实体。我可以通过在子实体中没有父实体并调用关联

  • 问题内容: 我基本上有两个实体和。 包含以下代码: 并包含一些内容,但没有任何意义。我想将一些实例添加到列表中,最重要的是,我想将一些重复项(相同的引用)添加到列表中两次或更多次。我仍然希望JPA坚持两者,并且我希望JPA坚持名单的顺序。 到目前为止,如果我仅添加唯一项,则此方法有效。如果我添加重复项,则JPA实际上想保留正确的数据(ID od1,Entity2的ID和顺序),但是由于关系表的主键

  • 如何在一对多的关系中保持子实体? 创建注册时,如果付款表中的注册列不可为空: 通用域名格式。mysql。jdbc。例外情况。jdbc4.MySQLIntegrityConstraintViolationException:列“registration”不能为null 但如果注册可为null,则会创建付款,但注册列为null: 直到发生异常并执行“HH000010:在批处理发布时,它仍然包含JDBC