Hibernate Grails和第三方工具使用相同的数据库:第三方删除后如何更新Grails?
我正在编写一个服务方法(Grails2.5.5),它使用第三方RESTAPI删除实体。在我的方法的中途,我对其中一个实体调用了Hibernate Grails和第三方工具使用相同的数据库:第三方删除后如何更新Grails?,hibernate,grails,Hibernate,Grails,我正在编写一个服务方法(Grails2.5.5),它使用第三方RESTAPI删除实体。在我的方法的中途,我对其中一个实体调用了.refresh(),得到了以下异常: org.springframework.orm.hibernate4.HibernateObjectRetrievalFailureException: No row with the given identifier exists: [MyEntity#7103]; nested exception is org.hibernat
.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]
这是真的,因为我刚刚使用RESTAPI删除了它。如果重要的话,被删除的MyEntity位于我试图刷新的实体上的hasMany
。我(想我)不想将此标记为ignoreNotFound
如何告诉Grails/Hibernate这个记录不再存在是可以的?我遇到了同样的问题,并找到了下一个解决方案 所以你有实体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()
}
}
}
public void deleteA(列表ID){
如果(!ids){
返回
}
List aToDelete=A.findallbydinList(ids)
aToDelete.each{A->
如果(a.e){
E=a.E
e、 删除(a)
}否则{
a、 删除()
}
}
}
因此,我们的想法是检查A是否与E有任何关系,如果是,则通过E删除它,否则直接删除它。对我来说效果很好。ha,我又遇到了这个问题,有一刻我非常激动,因为谷歌发现了这么一个对我有用的问题!第三方工具和我的grails webapp都查看同一个数据库。如果我使用第三方工具的RESTAPI(通常涉及删除多个表中的行)删除一个实体,那么如何通知grails删除了什么?