首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是hibernate bug吗?

是hibernate bug吗?
EN

Stack Overflow用户
提问于 2013-08-12 21:19:30
回答 1查看 483关注 0票数 1

我写

代码语言:javascript
复制
    String sql = "select candidate_skill.candidate_id from candidate_skill " +
            "inner join skill on  skill.id = candidate_skill.skill_id  " +
            "where skill_id in (:skillIdList) group by candidate_skill.candidate_id " +
            "Having count(candidate_skill.candidate_id) = (select count(*) from skill where skill.id in (:skillIdList) )";
    sql = sql.replace(":skillIdList", generateSkillIdList(skills));
    Query query = session.createSQLQuery(sql);
    List<Candidate> candidates = query.list();

它运行良好

第二种情况:

代码语言:javascript
复制
    String sql = "select candidate_skill.candidate_id from candidate_skill " +
            "inner join skill on  skill.id = candidate_skill.skill_id  " +
            "where skill_id in :skillIdList group by candidate_skill.candidate_id " +
            "Having count(candidate_skill.candidate_id) = (select count(*) from skill where skill.id in :skillIdList )";
    Query query = session.createSQLQuery(sql).setParameterList("skillIdList", skills);
    List<Candidate> candidates = query.list()

日志:

代码语言:javascript
复制
Hibernate: select candidate_skill.candidate_id from candidate_skill inner join skill on  skill.id = candidate_skill.skill_id  where skill_id in (?, ?) group by candidate_skill.candidate_id Having count(candidate_skill.candidate_id) = (select count(*) from skill where skill.id in ?, ? )

它不能工作

第三:

代码语言:javascript
复制
String sql = "select candidate_skill.candidate_id from candidate_skill " +
                "inner join skill on  skill.id = candidate_skill.skill_id  " +
                "where skill_id in :skillIdList group by candidate_skill.candidate_id " +
                "Having count(candidate_skill.candidate_id) = (select count(*) from skill where skill.id in (:skillIdList) )";
        Query query = session.createSQLQuery(sql).setParameterList("skillIdList", skills);
        List<Candidate> candidates = query.list();

日志:

代码语言:javascript
复制
Hibernate: select candidate_skill.candidate_id from candidate_skill inner join skill on  skill.id = candidate_skill.skill_id  where skill_id in (?, ?) group by candidate_skill.candidate_id Having count(candidate_skill.candidate_id) = (select count(*) from skill where skill.id in (?, ?) )

它运行良好

附言:注意:skillIdList周围的括号

如果我在查询中两次使用setParameterList(" argument ",value)和argument,那么第一次hibernate将使用方括号,第二次使用- none

EN

回答 1

Stack Overflow用户

发布于 2013-08-12 21:29:53

IN的语法需要使用方括号。

关于第三个示例为什么有效,有两个猜测:

  • hibernate具有自动追加缺少的括号的功能,但不知何故,这并未扩展到子查询
  • sql server首先执行子选择,然后其他查询因您传递的参数而变得冗余,因此不会执行。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18188054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档