Spring batch JPA 2.0/Hibernate:级联合并操作在子实体上设置空值
我在下图中简化了实体图: 级联合并是为具有一对一/一对一关系的所有实体配置的,除了从C到D(因为这会影响系统其他部分的需求)。我正在使用一个spring批处理,它使用下面覆盖的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()) {
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
?