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

时间:2014-01-20 14:41:05

标签: java sql hibernate hql

我是Hibernate的新手。

当我尝试反布尔

@Query(value = "update ToDo t set t.done= (abs(t.done -1)) where t.id=:id") public void toogleDone(@Param("id") long id);

我有这个例外:

[2014-01-20 16:20:38] java.lang.ClassCastException:
     无法在org.hibernate.type.descriptor.sql.BigIntTypeDescriptor的org.hibernate.type.descriptor.java.LongTypeDescriptor.unwrap(LongTypeDescriptor.java:36)中将java.lang.Integer强制转换为java.lang.Long。 $ 1.doBind(BigIntTypeDescriptor.java:57)......

当我尝试这个查询时:

`@Query(value =“update ToDo 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.ToT设置t.done =(NOT t.done)其中t.id = :ID]

你有没有想过在HQL中反布尔值?

2 个答案:

答案 0 :(得分:0)

您只想切换位值?您可以使用CASE完成此操作。

update ToDo t set t.done = (case when t.done = 1 then 0 else 1 end) where t.id=:id

答案 1 :(得分:0)

使用set t.done = (t.done=false),因此查询将是:

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