Grails和第三方工具使用相同的数据库:如何在第三方删除后更新grails?

时间:2017-04-10 16:45:40

标签: hibernate grails

我正在编写一个使用第三方rest API删除实体的服务方法(Grails 2.5.5)。在我的方法的中途,我在其中一个实体上调用.refresh(),我得到了这个例外:

org.springframework.orm.hibernate4.HibernateObjectRetrievalFailureException: No row with the given identifier exists: [MyEntity#7103]; nested exception is org.hibernate.UnresolvableObjectException: No row with the given identifier exists: [MyEntity#7103]

这是真的,因为我刚刚使用REST API删除它。如果重要,则删除的MyEntity位于我尝试刷新的实体上的hasMany。我不想(我想)将其标记为ignoreNotFound

如何告诉Grails / Hibernate这条记录不再存在?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并找到了下一个解决方案。

所以你有实体E有实体A的列表。 如果您需要删除实体A,您需要执行以下操作:

 public void deleteA(List<Integer> ids) {
    if (!ids) {
        return
    }
    List<A> aToDelete = A.findAllByIdInList(ids)
    aToDelete.each { A a ->
        if(a.e) {
            E e = a.e
            e.a.remove(a)
        } else {
            a.delete()
        }
    }
}

所以我的想法是检查A是否与E有任何关系,以防是通过E删除它,否则直接删除它。对我来说工作正常。