HibernateQueryException:数字内部的意外标记

时间:2014-10-21 10:11:07

标签: java hibernate hql

我从这个Query中得到一个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);
    }

例外

org.springframework.orm.hibernate3.HibernateQueryException: 
    unexpected token: 94 near line 1, column 35 [from Data d where d.barcode in (0194)];

2 个答案:

答案 0 :(得分:1)

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

所以你可以应用这个修复:

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

答案 1 :(得分:0)

引用第一个结果就是解决问题。由于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);
}