我正在编写一个使用第三方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这条记录不再存在?
答案 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删除它,否则直接删除它。对我来说工作正常。