我有两个班休眠模式,假设A和B B有一个多到一个参考A.删除休眠相关对象
我查询一个A和一个B对象。这些从会话中分离出来,并在某处/其他地方处理。 B.A属性是一个懒惰的代理。过了一会儿,A和B都需要被删除。我创建了一个新的会话并呼叫.delete(A)
和.delete(B)
。
删除就可以了,但后来删除乙方原因造成以下异常,
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: com.xxx.hibernate.objects.B.A
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:95) [hibernate3.jar:na]
at org.hibernate.event.def.DefaultDeleteEventListener.deleteEntity(DefaultDeleteEventListener.java:272) [hibernate3.jar:na]
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:163) [hibernate3.jar:na]
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:74) [hibernate3.jar:na]
at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:794) [hibernate3.jar:na]
at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:772) [hibernate3.jar:na]
陷在它看起来寿删除一个非空检查完成时的代码,并且由于A先删除,删除的B未通过空检查。它认为它是一个引用是“null”,即使我传入的B对象被设置为非null。看起来像在内部会话状态中进行了一些查找并找到了删除的A实例。
任何人都知道我该如何解决这个问题?如果可能的话,我宁愿不依赖于删除的顺序,除非在某种原因我没有看到B之前删除A基本上是错误的。
我也不完全确定为什么删除时需要空检查。
好主意,但不幸的是它只是做一个删除的id和versionNo这是我所期望的。 – 2009-10-30 12:05:32
强迫得出这个顺序很重要,我猜hibernate试图在删除命中DB之前强制执行fk约束。 – 2009-10-30 13:58:04