У меня следующая проблема: у меня есть три связанных класса. Я их аннотировал, но получаю неправильные результаты (описано ниже):
@Entityd
@Table(name = "ClassA")
public class ClassA{
@Id
@GeneratedValue
private Long id = 0L;
...
@OneToMany(fetch = FetchType.EAGER,cascade=CascadeType.ALL)
@Fetch(FetchMode.SELECT)
@Column(name = "ClassBList")
private List<ClassB> listB;
...
}
@Entity
@Table(name="ClassB")
public class ClassB {
@Id
@GeneratedValue
private Long id = 0L;
...
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
@Column(name = "ClassCList")
private List<ClassC> listC;
...
}
@Entity
@Table(name="ClassC")
public class ClassC {
@Id
@GeneratedValue()
private Long id = 0L;
...
@ElementCollection
private List<String> listD;
...
}
Когда я работаю с этой структурой для первого ClassA, который я создаю, сохраняю и загружаю, все в порядке. Для нового экземпляра ClassA, который я сохраняю для репо и загрузки снова, у меня неожиданно появляются строки первого ClassA в listD.
В результате мне нужно сохранить каждый класс «независимо». Таким образом, коллекции каждого класса должны содержать уникальные (каждый со своим идентификатором и подсписками) объекты.
Каков наилучший способ (аннотации) для моделирования этих классов в Java 8 с Spring Boot 2.2.0. M5 и javax.persistence-api 2.2?
РЕДАКТИРОВАТЬ:
Теперь я удалил класс B и переписал класс A так:
@Entity
@Table(name = "ClassA")
public class ClassA{
@Id
@GeneratedValue
private Long id = 0L;
...
@OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, cascade = CascadeType.ALL)
@MapKey(name = "type")
private Map<String,Set<ClassC>> classCmap;
...
}
Thisвыдаёт мне ошибку вроде:
org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class
Как мне смоделировать / решить / аннотировать это?