环境:Hibernate3
下面是根据传过来的condition值,例如我的Teacher(这里是个对象)表中有个name字段,想根据这个字段去查询表中的数据,条件的格式是name like '肖%',这样写是错误的,因为Hibernate在解析一个HQL语句的时候,对表和字段都进行了别名,那么你传个name like '肖%'这样的条件,hibernate不知道name是个什么?不知道是表中的一个字段,所以下面的查询总是返回null.
public List find(String condition) {
String hql = " from Teacher where "+condition;
List result = getHibernateTemplate().find(hql);
if (result.size() > 0){
return result;
}
return null;
}
所以如果你要按一个字段或指定字段查询表中数据,你写成下面的形式是正确的,可以查询出数据
public List find(String name) {
String hql = " from Teacher where name like ?";
List result = getHibernateTemplate().find(hql, name+"%");
if (result.size() > 0){
return result;
}
return null;
}
所以对于我们需要按给定的查询条件怎么去查询呢,使用下面的方法就可以了,使用SQL进行查询。
public List find(String condition) {
String sql = "select {t.*} from teacher t where "+condition;
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.addEntity("t", Teacher.class);
List result = sqlQuery.List();
if (result.size() > 0){
return result;
}
return null;
}
这样就可以查询出数据了,但是这样的写法需要注意一点:
select 的时候必须是 select {t.*} from ,不能是 select * from ,否则会报错,说无效的字段名。。
下面是根据传过来的condition值,例如我的Teacher(这里是个对象)表中有个name字段,想根据这个字段去查询表中的数据,条件的格式是name like '肖%',这样写是错误的,因为Hibernate在解析一个HQL语句的时候,对表和字段都进行了别名,那么你传个name like '肖%'这样的条件,hibernate不知道name是个什么?不知道是表中的一个字段,所以下面的查询总是返回null.
public List find(String condition) {
String hql = " from Teacher where "+condition;
List result = getHibernateTemplate().find(hql);
if (result.size() > 0){
return result;
}
return null;
}
所以如果你要按一个字段或指定字段查询表中数据,你写成下面的形式是正确的,可以查询出数据
public List find(String name) {
String hql = " from Teacher where name like ?";
List result = getHibernateTemplate().find(hql, name+"%");
if (result.size() > 0){
return result;
}
return null;
}
所以对于我们需要按给定的查询条件怎么去查询呢,使用下面的方法就可以了,使用SQL进行查询。
public List find(String condition) {
String sql = "select {t.*} from teacher t where "+condition;
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.addEntity("t", Teacher.class);
List result = sqlQuery.List();
if (result.size() > 0){
return result;
}
return null;
}
这样就可以查询出数据了,但是这样的写法需要注意一点:
select 的时候必须是 select {t.*} from ,不能是 select * from ,否则会报错,说无效的字段名。。