HQL查询使用in子句查找数据

时间:2015-12-24 10:23:42

标签: java hql

我正在尝试使用 in子句访问某些数据,但以下内容 例外

  

意外令牌:客户靠近第1行第81列[来自   app.com.db.DTO.SmsSourceDTO as sms where sms.description in(   注册客户,外部数据库,生日)]

显示

SmsSourceDTO.java

   @Table(name = "sms_source_tbl")
    public class SmsSourceDTO implements Serializable {

        private Integer id;
        private String description;
   }

TestHql.java

       listOfSelectedDatabase  = {Registered Customer,External DB,Birthday};

      String hqlString = "from SmsSourceDTO as sms where sms.description in(" + listOfSelectedDatabase  +")";
        getResultSetByHQL(hqlString));

       protected List getResultSetByHQL(String hql) throws DataBaseException {
            Query query = null;

            query = getHbSession().createQuery(hql);
            session = null;
            return query.list();
       }

调试时我得到以下查询=> from SmsSourceDTO as sms where sms.description in ( Registered Customer,External DB,Birthday)

任何人都可以提供帮助。

1 个答案:

答案 0 :(得分:0)

您正在尝试将参数列表添加到HQL查询中。我建议你使用hibernate参数绑定来做到这一点。

首先,如果要包含字符串值列表,请在使用

之前创建它
List<String> listOfSelectedDatabase = Arrays.asList("Registered Customer", "External DB", "Birthday");

代替

listOfSelectedDatabase = {Registered Customer,External DB,Birthday};

然后在HQL查询中创建一个参数并提供其值,如下所示:

String hqlString = "from SmsSourceDTO as sms where sms.description in (:paramList)";
Query query = session.createQuery(hqlString);
query.setParameterList("paramList", listOfSelectedDatabase);

最后,这个session = null;是什么?我不明白那句话。