Я уже отвечал на предыдущие вопросы, но все решения по-прежнему не работают в моем проекте.
У меня есть проект платформы CUBA, в котором используется ядро Spring 5.2.3. CUBA использует реализацию ORM на основе структуры EclipseLink.
У меня есть 1 сущность MainClass, а потомки - сущность подкласса.
Определение основного класса
//annotations here
public class MainClass{
@Composition
@OnDelete(DeletePolicy.CASCADE)
@OneToMany(mappedBy = "mainClass", cascade = CascadeType.ALL, orphanRemoval = true)
protected List<SubClass> subClass;
public Category getCategory() {
return category;
}
}
// сущность подкласса
//annotations here
public class SubClass{
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "MAINCLASS_ID")
protected MainClass mainClass;
}
Проблема с этой настройкой в том, что она сохраняет только сущность основного класса, но не сущность подкласса.
Класс обслуживания
@Service("MainService")
public class ServiceClass{
@Inject
private Persistence persistence;
@Transactional
public void saveOrUpdateMain(MainClass mainClass){
MainClass qMainClass = (MainClass) entityManager.createQuery("select
b from main_Class b where b.extID = ?1")
.setParameter(1, extID).getSingleResult();
//assume mainClass is not null, set the primary key of qMainClass to mainClass
mainClass.setId(qMainClass.getId());
entityManager.merge(mainClass);
}
}
Я прочитал это 2 ссылки, но все еще не решило мою проблему.
Почему слияние не выполняется каскадом для отношений «один ко многим»
JPA не вставляет новые дочерние элементы от одного к другому. много отношений, когда мы используем слияние