我想在不知道他的身份的情况下检查数据库中对象的存在。我正在使用HQL查询,但我正在接受一个偏见
org.hibernate.TransientObjectException:
object references an unsaved transient instance - save the transient instance before flushing
这是我的代码exapmle:
ObjectToCheck obj = new ObjectToCheck(); //this is a mapped entity
obj.setName("name");
obj.setValue("value");
List list = session.createQuery("from ObjectToCheck as o where o = ?")
.setEntity(0, obj)
.list();
我理解这个异常的原因,但是如何使用transistent对象作为参数进行查询?我想知道,数据库中是否是平等对象。
答案 0 :(得分:4)
我认为异常不是因为您使用瞬态实体作为查询的参数(尽管此查询也是错误的,请参阅下文)。
异常来自Hibernate在执行查询之前刷新会话这一事实,但是您已将临时实体附加到会话中的附加实体。因此它试图保存关联,但由于该对象是暂时的并且还没有任何ID,所以这是不可能的。
现在您的查询:where o = ?
不会按名称和值进行神奇的查询。它将按ID查询。这正是你不想做的事情。因此查询应为:
select o from ObjectToCheck o where o.name = :name and o.value = :value
你应该绑定两个参数。另一种方法是通过示例使用查询。请参阅http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#querycriteria-examples。
答案 1 :(得分:0)