【问题标题】:Hibernate : Caused by: java.sql.SQLException: Operand should contain 1 column(s)休眠:引起:java.sql.SQLException:操作数应包含 1 列
【发布时间】:2018-01-16 01:00:31
【问题描述】:

例外: 引起:java.sql.SQLException:操作数应包含 1 列 原因:org.hibernate.exception.DataException:无法提取ResultSet

我写的HQL如下:

select sm from SystemMessage sm 
left join sm.systemMessageMaps smrm 
left join smrm.role r
left join smrm.projectGroup pg
left join smrm.assessmentVersion av 
left join smrm.severity sms
where ( (r.id is NULL) and (pg.id is NULL) and (av.id IN (:assesmentVersionID) ) 
         or(pg.code =:projectGroup and av.id IN (:assesmentVersionID) and  r.id is NULL) 
         or(r.name =:roleName AND av.id IN (:assesmentVersionID) and pg.id is NULL)
         or( r.name =:roleName and  pg.code =:projectGroup AND av.id IN (:assesmentVersionID) ) 
       ) and 
      ( ( sm.startDate is null or sm.startDate <= current_timestamp ) and ( sm.endDate is null or sm.endDate >= current_timestamp)) 
order by sms.priority,smrm.severityRank,sm.startDate

在将 in 子句添加到参数后,我碰巧得到了这个异常:

av.id IN (:assesmentVersionID)

我将参数值设置为

query.setParameterList("assesmentVersionID", assessmentVersionIDList);

我想知道我哪里出错了!

【问题讨论】:

  • 我使用的是Hibernate,BatchPreparedStatementSetter是JdbcTemplate类使用的批量更新回调接口。听起来不相关吗?
  • 是的,很抱歉,删除了评论

标签: mysql hibernate hql


【解决方案1】:

尝试删除括号:

select sm from SystemMessage sm 
left join sm.systemMessageMaps smrm 
left join smrm.role r
left join smrm.projectGroup pg
left join smrm.assessmentVersion av 
left join smrm.severity sms
where ( (r.id is NULL) and (pg.id is NULL) and av.id IN (:assesmentVersionID) 
         or(pg.code =:projectGroup and av.id IN (:assesmentVersionID) and  r.id is NULL) 
         or(r.name =:roleName AND av.id IN (:assesmentVersionID) and pg.id is NULL)
         or( r.name =:roleName and  pg.code =:projectGroup AND av.id IN (:assesmentVersionID) ) 
       ) and 
      ( ( sm.startDate is null or sm.startDate <= current_timestamp ) and ( sm.endDate is null or sm.endDate >= current_timestamp)) 
order by sms.priority,smrm.severityRank,sm.startDate

这应该可以,如果不尝试从(:assesmentVersionID) 中删除括号。

如果它解决了问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2023-03-29
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多