Слияние сущностей с использованием отношения Cascade.ALL OnetoMany без вставки записей для детей - PullRequest
0 голосов
/ 07 августа 2020

Я уже отвечал на предыдущие вопросы, но все решения по-прежнему не работают в моем проекте.

У меня есть проект платформы 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 не вставляет новые дочерние элементы от одного к другому. много отношений, когда мы используем слияние

...