Java 如果我只是清除@OneToMany关系,验证不会被触发
在使用JPA2.0和Hibernate更新实体时,我遇到了一个问题(我没有使用其他提供者进行测试)。以下是我的实体(为简洁起见,请删节): 这是对象持久化后执行的代码:Java 如果我只是清除@OneToMany关系,验证不会被触发,java,hibernate,validation,jpa,merge,Java,Hibernate,Validation,Jpa,Merge,在使用JPA2.0和Hibernate更新实体时,我遇到了一个问题(我没有使用其他提供者进行测试)。以下是我的实体(为简洁起见,请删节): 这是对象持久化后执行的代码: em.getTransaction().begin(); CriterioDefinicaoImpFederais outro = critRepo.porId(criterio.getId()); em.getTransaction().commit(); em.clear(); out
em.getTransaction().begin();
CriterioDefinicaoImpFederais outro = critRepo.porId(criterio.getId());
em.getTransaction().commit();
em.clear();
outro.removerGrupo(outro.getGrupos().get(0));
outro.removerGrupo(outro.getGrupos().get(0));
em.getTransaction().begin();
//This method calls merge
critRepo.salvar(outro);
em.getTransaction().commit();
谢谢 我还没有对此进行验证,但可能是因为您没有通过遵循JavaBean规范的setter访问该值
如果您通过普通setter将其设置为一个新的空集合,请尝试。Hi,您能在检索和更新实体的位置发布代码吗?@Jean感谢您的回答。我创建了一个新方法
setGrupos
并调用setGrupos(newarraylist())代码>并获得相同的行为。
//This is critRepo.porId
String sql = "select distinct c from CriterioDefinicaoImpFederais c "
+ " join fetch c.licenca "
+ " join fetch c.grupos g "
+ "where "
+ " c.id = :id ";
em.getTransaction().begin();
CriterioDefinicaoImpFederais outro = critRepo.porId(criterio.getId());
em.getTransaction().commit();
em.clear();
outro.removerGrupo(outro.getGrupos().get(0));
outro.removerGrupo(outro.getGrupos().get(0));
em.getTransaction().begin();
//This method calls merge
critRepo.salvar(outro);
em.getTransaction().commit();