【问题标题】:join and where clause in hibernate休眠中的join和where子句
【发布时间】:2017-04-25 14:59:02
【问题描述】:

我在 hibernate 3 中使用 join 和 where 子句。但我无法找到解决方案。我得到了错误。

Query qry= session.createQuery("SELECT addemployee.eid,addemployee.fname,addemployee.location,"
        + "empdet.jtitle,empdet.leadname FROM addemployee LEFT JOIN empdet ON addemployee.eid = empdet.eid WHERE (addemployee.eid ='"+id+"')");

        List l = qry.list();
        Iterator it=l.iterator();

        while(it.hasNext())
        {

            Object rows[] = (Object[])it.next();
            System.out.println(rows[0]+separator+rows[1]+separator+rows[2]+separator+rows[3]+separator+rows[4]);
        }

问题:org.hibernate.hql.ast.QuerySyntaxException:意外令牌:在第 1 行第 127 列附近打开 [SELECT addemployee.eid,addemployee.fname,addemployee.location,empdet.jtitle,empdet.leadname FROM addemployee LEFT JOIN empdet ON addemployee.eid = empdet.eid WHERE (addemployee.eid ='206')]

【问题讨论】:

  • 它是哪个数据库?当您使用 DBVis 或 SQL 开发人员等工具直接在 DB 上运行此查询时会发生什么? SyntaxException 表明它的格式错误
  • 您似乎正在尝试将 SQL 传递给需要 HQL 的方法。您是否尝试过使用createSQLQuery 而不是createQuery
  • 您的addemployee.eid 是字符串还是整数?
  • 我使用的是 Mysql 5.7
  • eid-integer 和其余字段保存 varchar。

标签: java mysql hibernate


【解决方案1】:

尝试改用session.createSQLQuery()

并且不要加上引号 (''),您输入的是 numbers,而不是 varchar

像这样。

Query qry= session.createSQLQuery("SELECT addemployee.eid,addemployee.fname,addemployee.location,"
    + "empdet.jtitle,empdet.leadname FROM addemployee LEFT JOIN empdet ON addemployee.eid = empdet.eid WHERE (addemployee.eid ="+id+")"); 

【讨论】:

  • charvar 那是什么?你的意思是varchar
  • @Rahul 指出。我只是将 Character Varying 的术语缩短为 charvar。顺便谢谢。我编辑了它。
【解决方案2】:

Hibernate Session 的 createQuery() 方法需要有效的 HQL 语法。您可以查看如何编写连接here。 基本上,在 HQL 中,您使用实体,而不是 SQL 表。所以你不需要写ON,因为你已经映射了实体之间的关联。

如果你还想写原生 SQL 查询,你需要使用 改为session.createSQLQuery();

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多