0

我已经查看了以前的问题,但所有解决方案仍然不适用于我的项目。

我有一个使用 spring core 5.2.3 的 CUBA 平台项目。CUBA 使用基于 EclipseLink 框架的 ORM 实现。

我有 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;
}

这个设置的问题是它只保存了 MainClass 实体而不是 SubClass 实体。

服务等级

@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 不会从一对多关系中插入新的孩子

4

1 回答 1

0

在 CUBA 中,DataManager是处理数据的首选选项。它自动解析级联操作,不需要明确的事务定义。请先尝试使用 DataManager 实现此逻辑。

于 2021-09-30T08:40:50.537 回答