Spring batch JPA 2.0/Hibernate:级联合并操作在子实体上设置空值

Spring batch JPA 2.0/Hibernate:级联合并操作在子实体上设置空值,spring-batch,jpa-2.0,one-to-many,cascade,hibernate-4.x,Spring Batch,Jpa 2.0,One To Many,Cascade,Hibernate 4.x,我在下图中简化了实体图: 级联合并是为具有一对一/一对一关系的所有实体配置的,除了从C到D(因为这会影响系统其他部分的需求)。我正在使用一个spring批处理,它使用下面覆盖的doWrite方法,只需手动调用所有D实体上的合并: protected void doWrite(EntityManager entityManager, List<? extends A> items) { if (logger.isDebugEnabled()) {

我在下图中简化了实体图:

级联合并是为具有一对一/一对一关系的所有实体配置的,除了从CD(因为这会影响系统其他部分的需求)。我正在使用一个spring批处理,它使用下面覆盖的
doWrite
方法,只需手动调用所有D实体上的合并:

protected void doWrite(EntityManager entityManager, List<? extends A> items) {

        if (logger.isDebugEnabled()) {
            logger.debug("Writing to JPA with " + items.size() + " items.");
        }

        if (!items.isEmpty()) {
            long mergeCount = 0;
            for (A item : items) {
                if (!entityManager.contains(item)) {
                    entityManager.merge(item);

                    for(B b : item.getBs()){
                        for(D d : b.getC().getDs()){
                             entityManager.merge(item);             
                        }   
                    }


                    mergeCount++;
                }
            }
            if (logger.isDebugEnabled()) {
                logger.debug(mergeCount + " entities merged.");
                logger.debug((items.size() - mergeCount) + " entities found in persistence context.");
            }
        }

    }

protectedvoiddowrite(EntityManager EntityManager,list)您是否尝试过简单地切换到
HibernateItemWriter
(它调用
save或UPDATE(Object entity)
)并添加Hibernate的
CascadeType.UPDATE
…或
ALL
?您是否尝试过简单地切换到
HibernateItemWriter
(调用
saveOrUpdate(对象实体)
)并添加Hibernate的
CascadeType.UPDATE
…或
ALL