我从这个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)];
答案 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);
}