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、 设置参数(“重量”,重量);