Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用HQL的条件更新_Java_Hibernate_Hql - Fatal编程技术网

Java 使用HQL的条件更新

Java 使用HQL的条件更新,java,hibernate,hql,Java,Hibernate,Hql,我正在尝试使用以下脚本更新数据库中的一些行,该脚本工作得非常好: update DOS set NAMEDOS=:name, AGEDOS=:age, WEIGHTDOS=:weight where CODEDOS=:code 我的问题是,有时权重可以是空的或空的,所以我必须只设置其他属性 我尝试过这样做,但似乎不起作用: update DOS set NAMEDOS=:name, AGEDOS=:age, WEIGHTDOS= (case when weight is not null th

我正在尝试使用以下脚本更新数据库中的一些行,该脚本工作得非常好:

update DOS
set NAMEDOS=:name,
AGEDOS=:age,
WEIGHTDOS=:weight
where CODEDOS=:code
我的问题是,有时权重可以是空的或空的,所以我必须只设置其他属性

我尝试过这样做,但似乎不起作用:

update DOS
set NAMEDOS=:name,
AGEDOS=:age,
WEIGHTDOS= (case when weight is not null then :weight else :WEIGHTDOS end),
where CODEDOS=:code

你能帮我一个忙吗。

试着切换一下括号,我认为
:WEIGHTDOS
应该没有双点,因为它是直接的列名而不是参数:

update DOS
    set NAMEDOS=:name,
    AGEDOS=:age,
    WEIGHTDOS= case when (:weight is not null) then :weight 
                  else WEIGHTDOS 
               end,
    where CODEDOS=:code

得到的异常是什么?当weight有一个值时,脚本运行良好,但当尝试使用null值时,我得到java.sql.SQLException:ORA-00932:不一致的数据类型:应为BinaryGet Char WEIGHTDOS的列类型是什么?列WEIGHTDOS是一个:string更准确地说,它是一个VARCHAR2(),结果您的答案非常有用,问题在于我构建请求的方式:我应该使用Query q=getSession().createQuery();q、 设置管柱(“重量”,重量);而不是:Query q=getSession().createQuery();q、 设置参数(“重量”,重量);