JPA:保留包含原始“键”值的Map

时间:2015-02-22 19:47:08

标签: java hibernate java-ee jpa eclipselink

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

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

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

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

我尝试了一些像@MapKey这样的东西,但是当我稍后从数据库加载对象时,键值不再是哈希码而是自动生成的id(对我来说没用)。

我也尝试了@ElementCollection用于地图,但后来我得到了一个同步错误(我认为这是因为我只触发了顶级类的整个持久化,并且一些对象指向对方)。

@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 个答案:

答案 0 :(得分:0)

@MapKey(name="hashField")

哈希值必须显式存储在OtherEntity.hashField中。 mapkey用于指示哪个其他对象属性用作键值