JPA:保留包含原始 "key" 值的 Map

JPA: persist a Map including the original "key" value

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

有一个 "top-level" class A,因此我可以在其上执行 CASCADE.ALL 但我对 Class B 和 a 的子对象有问题HashMap 字段。

Map 的 "key" 是对象本身的哈希码,存储为 "value"。

当我级联持久化对象 B 时,数据库中的 "key" 列始终是 "null"( 为什么 ?),即使该对象有一些键-值对。

我尝试了@MapKey 之类的东西,但是当我稍后从数据库加载对象时,键值不再是哈希码而是自动生成的 ID(对我没有用)。

我也为地图尝试了@ElementCollection,但后来我得到了一个同步错误(我认为这是因为我只从顶层class触发了整个持久化并且一些反对指向每个其他)。

@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;

感谢您的帮助, 亚历克斯

@MapKey(name="hashField")

散列值必须显式存储在 OtherEntity.hashField 中。 mapkey 用于告诉哪些其他对象属性被用作键值