У меня есть дерево как структура данных с каким-то сложным рисунком. С абстрактным классом Element существует CompositeElement и SingleElement. Это выглядит так:jpa карта принадлежит «одной» стороне
@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) не будет работать, потому что здесь я пропускаю ключ для карты.
Есть ли способ сохранить право собственности на отношения на стороне родителя, но все же сделать его двунаправленным?
Вы, очевидно, не рассказываете нам всю историю.Вся идея переупорядочения детей кажется несовместимой с использованием карты. Пожалуйста, объясните, что вы имеете в виду. – redge
Существует также аннотация @JoinTable, которую вы могли бы исследовать, что может позволить вам делать то, что вы хотите. – redge
Почему переупорядочивание несовместимо с использованием карты? Предположим, у вас есть повестка дня встречи с различными пунктами повестки дня. И затем вы заметите, что вам нужно поменять 2 из них. Моя точка зрения: отдельные пункты повестки дня не меняются, когда вы меняете свою позицию в повестке дня. Ваш вопрос? – EasterBunnyBugSmasher