Java HibernateQueryException:数字中存在意外标记

Java HibernateQueryException:数字中存在意外标记,java,hibernate,hql,Java,Hibernate,Hql,我从这个查询中得到一个HibernateQueryException。innerQuery返回一个合法数字(0194),但outerQuery抛出exeption。我看不出语法中有任何错误。同样奇怪的是,解析异常从数字的中间开始 String innerQuery = "select barcode from Data where barcode is not null"; List<String> innerResults = getHibernateTemplate().find

我从这个查询中得到一个HibernateQueryException。innerQuery返回一个合法数字(0194),但outerQuery抛出exeption。我看不出语法中有任何错误。同样奇怪的是,解析异常从数字的中间开始

String innerQuery = "select barcode from Data where barcode is not null";
List<String> innerResults = getHibernateTemplate().find(innerQuery); //returns a List with one item "0194";
    if(!innerResults.isEmpty()){
        String outerQuery = "from Data d where d.barcode in (" +
        innerResults.toString().replace("[", "").replace("]", "") + ")";
        return getHibernateTemplate().find(outerQuery);
    }

您已将
条形码
字段存储为字符串(0194),因此必须引用您的值

因此,您可以应用此修复程序:

String innerQuery = "select concat(''', barcode, ''') from Data where barcode is not null";

引用第一个结果就是解决问题。由于HQL中的concat始终返回相同的字符串,而不是所选的值,因此我随后引用结果

String innerQuery = "select barcode from Data where barcode is not null";
List<String> innerResults = getHibernateTemplate().find(innerQuery);
List<String> results = new ArrayList<String>();
for(String barocde : innerResults){
    results.add("'" + barcode + "'");
}
if(!results.isEmpty()){
   String outerQuery = "from Data d where d.barcode in (" +
   results.toString().replace("[", "").replace("]", "") + ")";
   return getHibernateTemplate().find(outerQuery);
}
String innerQuery=“从条码不为空的数据中选择条码”;
List innerResults=getHibernateTemplate().find(innerQuery);
列表结果=新建ArrayList();
for(字符串barocde:innerResults){
结果。添加(““+”条形码+“”);
}
如果(!results.isEmpty()){
String outerQuery=“来自数据d,其中d.barcode位于(”+
results.toString().replace(“[”,”).replace(“]”,“)+”;
返回getHibernateTemplate().find(outerQuery);
}
String innerQuery = "select barcode from Data where barcode is not null";
List<String> innerResults = getHibernateTemplate().find(innerQuery);
List<String> results = new ArrayList<String>();
for(String barocde : innerResults){
    results.add("'" + barcode + "'");
}
if(!results.isEmpty()){
   String outerQuery = "from Data d where d.barcode in (" +
   results.toString().replace("[", "").replace("]", "") + ")";
   return getHibernateTemplate().find(outerQuery);
}