我们有一个控制器,我们正在尝试在域类上进行搜索。实际的搜索逻辑在服务中处理。此搜索涉及使用设置为SomeDomain.withCriteria
和fetchMode
的{{1}},SELECT
。搜索结果很好,具有所需的结果。一旦我们得到结果,我们将重定向到处理结果的同一个控制器中的另一个动作。从控制器返回会刷新会话,这是控制器抛出以下异常的地方:
对象引用未保存的瞬态实例 - 保存瞬态 冲洗前的实例
好吧,它在我们的代码中以某种方式出现,域对象被创建并且永远不会被保存。错误消息足以显示瞬态对象的类型,但它不会通知它在何时何地创建。这仍然是一个谜,这个对象是从哪里创建的,我现在正在寻找方法来获取对这个对象的引用。所以我的问题是如何找到所有处于瞬态的物体?
我希望引用这个神秘的未保存对象只是因为我想在其上调用discard并看看事情是如何发生的。我知道我不需要这个对象,所以如果它在某个地方闲逛,我想丢弃它,这样它就不会抛出异常了。如果有人也可以找出创建对象的原因和位置,那就太棒了。
答案 0 :(得分:1)
我们也有这个问题,它可能是一个令人讨厌的臭虫。据推测,通过走过Hibernate的内部结构可以找到所有的瞬态,但我从来没有走得太远。相反,我们通常通过flush()
和二分搜索进行调试:更积极地刷新会话,直到明显哪个操作为您的对象图引入了一个瞬态。