我们的项目有这样的需求,通过一系列算法生成HQL让Hibernate去执行,其中需要用到SELECT 表达式这样的SQL语句,但HQL会报告一个unexpected end of subtree的错误。xxxDao.getHibernateTemplate().find("SELECT 1=1");抛出:org.springframework.orm.hibernate3.HibernateQueryException: unexpected end of subtree [SELECT 1=1]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected end of subtree [SELECT 1=1]    org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:660)
    org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
    org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
    org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:912)
    org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:904)

解决方案 »

  1.   

    select 1=1 from dual你应该执行这个吧
      

  2.   

    From dual? dual是什么呀?
      

  3.   

    你的努力目标肯定不能是让Hibernate能执行select 1=1这样的语句,而是让select 1=1这样的语句不出现。
      

  4.   

    我们的模型最终是这样一句HQLSELECT xxx IN (yyy)其中yyy是一个复杂的子查询(根据用户的配置即时演算出的子查询)运算出的结果集合,xxx是要验证的一个id,目标是验证xxx在不在yyy中最初的模型都是用纯SQL实现的,上面这个SQL最终是一个一行一列的结果,0表示False 1表示True,很好用。现在换HQL之后没有类似的方法。我想到的一种是把yyy整个取出来到Java里去对比,但觉得这样会很慢会很痛苦
      

  5.   

    没有查到Dual的太多资料,试着配了一个,不太好使。
    http://www.javaeye.com/topic/50724
      

  6.   

    即便用hibernate,也可以用createSQLQuery来执行SQL代码。
    既然SQL可以,不妨这样做吧。
      

  7.   


    唉,整个SQL不都是即时运算出来的么?现在整个运算体系都改好了,都已经生成HQL了,而且是各种HQL片段经过算法再组合……