Hibernate HQL转换java.lang.ClassCastException:无法将java.lang.Integer转换为java.lang.Long

Hibernate HQL转换java.lang.ClassCastException:无法将java.lang.Integer转换为java.lang.Long,java,sql,hibernate,hql,Java,Sql,Hibernate,Hql,我是冬眠新手 当我尝试反布尔运算时 @Queryvalue=updatetodo t set t.done=abs.done-1,其中t.id=:id 公共空间toogleDone@Paramid长id 我有一个例外: 无法将org.hibernate.type.descriptor.java.LongTypeDescriptor.unwaplongtypedescriptor.java:36 org.hibernate.type.descriptor.sql.bigintypedescript

我是冬眠新手

当我尝试反布尔运算时

@Queryvalue=updatetodo t set t.done=abs.done-1,其中t.id=:id 公共空间toogleDone@Paramid长id

我有一个例外:

无法将org.hibernate.type.descriptor.java.LongTypeDescriptor.unwaplongtypedescriptor.java:36 org.hibernate.type.descriptor.sql.bigintypedescriptor$1.doBindBigIntTypeDescriptor.java:57

当我尝试此查询时:

`@Queryvalue=updatetodo t set t.done=NOT t.done,其中t.id=:id

public void toogleDone(@Param("id") long id);`
我有例外:

[2014-01-20 16:28:58]意外的AST节点:未[更新org.teamdev.todo.model.domain.todo t set t.done=未完成,其中t.id=:id]


有人知道如何在HQL中反转布尔值吗?

您只想切换位值吗?您可以通过用例来完成这个任务

update ToDo t set t.done = (case when t.done = 1 then 0 else 1 end) where t.id=:id
使用set t.done=t.done=false,因此查询将为:

update ToDo t set t.done = (t.done=false) where t.id=:id

Try:set t.done=t.done=false我也试过了,我遇到了异常意外的token=near false单独一个人怎么样?设置t.done=t.done=false?或者设置t.done=t.done<1或者设置t.done=t.done+0<1?非常感谢!这是工作!是的,我试过了。我在JPA控制台中取得了很好的成绩。但当它在我的程序中运行时,它崩溃了,出现了异常:原因:java.lang.IllegalArgumentException:org.hibernate.QueryParameterException:Position超出了声明的序数参数的数量。请记住,序数参数是基于1的!位置:1位于org.hibernate.ejb.QueryImpl.setParameterQueryImpl.java:451。。。我不知道发生了什么事,但是除了set t.done=t.done=false不起作用外,其他变量都没有。
update ToDo t set t.done = (t.done=false) where t.id=:id