У меня есть три класса сущностей ( A , B , C ). A должен содержать карту, которая отображает экземпляры B на экземпляры C .Все экземпляры C принадлежат карте какого-то A .Я пробовал это (геттеры и сеттеры опущены):
@Entity public class A {
@Id @GeneratedValue private Long id;
// I want to map this in an elegant way:
@OneToMany(mappedBy="a") @MapKey(name="b") private Map<B, C> map;
}
@Entity public class B {
@Id @GeneratedValue private Long id;
}
@Entity public class C {
@Id @GeneratedValue private Long id;
// I don't really want the following in Java, unidirectional access from A to C would suffice:
@ManyToOne private A a;
@ManyToOne private B b;
// Can I get rid of a and b?
}
Это дает хорошую схему (именно ту, которую я хочу!), Но в Java есть ужасное дублирование, учитывая, что теперь есть два способа указать отношение:
a.map.put(b, c);
и
c.a = a;
c.b = b;
Что произойдет, если я просто поменяю половину ассоциации?Это выглядит проблематично.Как лучше обойти это?Нет ли более элегантного решения для требуемого однонаправленного доступа?
Я подумал сделать C @Embeddable и использовать @ElementCollection для A.map , но вРеальность C - это абстрактный базовый класс для различных объектов, что означает, что его нельзя сделать @ Embeddable.