public MaterialCategory findByNames(final String[] singleRow, int j) {
final StringBuilder hql = new StringBuilder();
StringBuilder[] s = new StringBuilder[singleRow.length];
String str = "t";
s[0] = new StringBuilder("t");
for (int i=1; i<j; i++) {
str = str + ".parent";
s[i] = new StringBuilder(str);
}
hql.append("from MaterialCategory t where 1=1");
int i=0;
while (j != 0) {
hql.append(" and ");
hql.append(s[j-1]).append(".name=").append(":name" + i);
j--;
i++;
}
return this.getHibernateTemplate().execute(new HibernateCallback<MaterialCategory>() {
public MaterialCategory doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql.toString());
for(int i=0; i<singleRow.length-1; i++) {
query.setString("name" + i, singleRow[i]);
}
return (MaterialCategory) query.uniqueResult();
}
});
}
比如就j= 3
最后拼的hql语句是 “from MaterialCategory t where 1=1 and t.parent.parent.name = singleRow[0] and t.parent.name = singleRow[1] and t.name = singleRow[2] ”
------解决方案--------------------
T-SQL不支持:singleRow[0] and t.parent.name = singleRow[1] and t.name = singleRow[2] ”这种写法,你在前端需要拼接好参数。至于怎么拼接,网上搜搜就有了
------解决方案--------------------
建议用SQL Profiler工具跟踪一下后台执行的SQL语句是否正确.
------解决方案--------------------
sql不支持这种写法 “from MaterialCategory t where 1=1 and t.parent.parent.name = singleRow[0] and t.parent.name = singleRow[1] and t.name = singleRow[2] ”