我有一个类似树的数据结构,具有某种复合模式。对于抽象类 Element,有一个 CompositeElement 和一个 SingleElement。它看起来像这样:
@Entity
@DiscriminatorValue("Composite")
public class CompositeElement extends Element {
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(name="Sub_Elements")
@MapKeyColumn(name="xxx")
protected Map<Integer, Element> subs;
...
}
到目前为止,这种关系是单向的。它运作良好。但是现在出现了一个用例,我需要从子元素导航到父元素。所以我想做的是:
@Entity
@Inheritance
@DiscriminatorColumn("s_discriminator")
public class Element {
@ManyToOne(mappedBy="subs", fetch=FetchType.LAZY)
protected CompositeElement parent;
...
}
但是@ManyToOne 注解不允许“mappedBy”属性。
从域的角度来看,父对象拥有数据结构中的子对象。不是反过来。急切获取和级联规则也强调了这一点。
如果关系的所有权在子方,那么 child.setParent(p) 将不会真正起作用,因为这里我缺少地图的密钥。
有没有办法将关系的所有权保留在父级的一方,但仍然是双向的?