Java HibernateQueryException:数字中存在意外标记
我从这个查询中得到一个HibernateQueryException。innerQuery返回一个合法数字(0194),但outerQuery抛出exeption。我看不出语法中有任何错误。同样奇怪的是,解析异常从数字的中间开始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
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);
}