我需要使用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;
感谢您的帮助, 亚历
答案 0 :(得分:0)
@MapKey(name="hashField")
哈希值必须显式存储在OtherEntity.hashField中。 mapkey用于指示哪个其他对象属性用作键值