我正在尝试使用 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)
任何人都可以提供帮助。
答案 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;
是什么?我不明白那句话。