- package cait.cnas.dao.impl;
- import java.util.List;
- import org.hibernate.Query;
- import org.springframework.dao.DataAccessException;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- import cait.cnas.bo.SetApplyType;
- import cait.cnas.dao.ISetApplyTypeDAO;
- /**
- * @author linlw
- *
- */
- public class SetApplyTypeDAOImpl extends HibernateDaoSupport implements ISetApplyTypeDAO{
- /*
- * 根据计划安排流程号
- */
- public String findTypeName(String type) {
- List resultList;
- String typeName = "";
- String strHql= "select p from SetApplyType p where p.name like :name"; // 分别执行③可以。
- String strHql1= "select p from SetApplyType p where p.name like ?"; // 分别执行①可以。
- String strHql2= "select p from SetApplyType p where p.name like "+type; //用拼接HQL的方式,执行②,虽不抛异常,
- //但resultList.size() = 0
- try{
- resultList = this.getHibernateTemplate().find(strHql,type); //①
- resultList = this.getHibernateTemplate().find(strHql2); //②
- Query query = this.getHibernateTemplate().getSessionFactory().openSession().createQuery(strHql);//③
- query.setString("name",type);
- resultList = query.list();
- if(resultList.size() > 0){
- SetApplyType setApplyType = (SetApplyType)resultList.get(0);
- typeName = setApplyType.getCode();
- }
- }catch(DataAccessException t){
- t.printStackTrace();
- throw t;
- }
- return typeName;
- }
- }
在网上整理的回复帖子:
有种bug叫作sql注入漏洞
就是说的你写的这种拼接sql 。
解决方法 1 )如果你想写Hql查询中文,那么中文的参数必须以参数的形式提供给查询;
原因好像是:中文占位的高低为问题产生的。
用绑定参数的方法可以解决 。用占位符,再用setString , 不要在HQL中直写中文。即上面的③对应的。
2)antlr的问题 , 暂时的解决方法是
将 hibernate.query.factory_class 属性设置成 org.hibernate.hql.classic.ClassicQueryTranslatorFactory ,是可以了,但用不了批量更新和删除功能(不知道正确否,待查)。
如下:
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
- </props>
- </property>
- <property name="mappingResources">
- <list>
- <value>cait/cnas/bo/BusiUserOp.hbm.xml</value>
- <value>cait/cnas/bo/AppPerson.hbm.xml</value>
- <value>cait/cnas/bo/OrgBaseinfo.hbm.xml</value>
- <value>cait/cnas/bo/Pnumber.hbm.xml</value>
- </list>
- </property>
- </bean>
3)又有的说:问题解决了,原来以前用的Hibernate为 Hibernate-Version: 3.1.2 ,这次用的是Hibernate-Version: 3.0.5。 把包换为3.1.2就可以了!这是Hibernate3.02- 3.05的 BUG 。解决办法是升级到 Hibernate3.1 rc2 ! 只需要替换 文件就可以了!
可以的,我原来用Hibernate3.05有这个问题,后来从www.hibernate.org上下载Hibernate3.1 rc2 的tar.gz包. 把这个包里的hibernate3.jar 考过来替换就行了. 其它的依赖的包,我全部用spring1.2.4里的. 如果你这样还不行,就没办法了,不过我的行了!