1. 程式人生 > >hql/sql傳中文引數出現亂碼

hql/sql傳中文引數出現亂碼

問題:如題

解決:  推薦第一種解決方案

1.佔位符

可以使用?或者:***的方式在外部配置查詢引數,如:

Query query=session.createQuery("from TestStu s where s.team=:team and s.age>:age"); 或者

Query query=session.createQuery("from TestStu s where s.team=? and s.age>?);

這句話的意思是從一個持久的team物件中,取出其持有的TestStu集合,並篩選出age大於執行資料的記錄

我們可以這樣設定引數
query.setParameter("team",team,Hibernate.entity(TestTeam.class));
 //或者使用query.setEntity("team",team);
query.setParameter("age", 15);

但我們決不能在HQL中又出現?,又出現變數佔位符,即

Query query=session.createQuery("from TestStu s where s.team=? and s.age>:age);

這樣,在設定引數時候,會出現異常如下:

 cannot define positional parameter after any named parameters have been defined [from Search.filter.TestStu s where s.team=:team and s.age>?] 

2.配置檔案 spring配置檔案中加入紅色部分

<bean id="sessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   ........
   <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">
      org.hibernate.dialect.SQLServerDialect
     </prop>
    
<prop key="hibernate.query.factory_class">
             org.hibernate.hql.classic.ClassicQueryTranslatorFactory    
      </prop>
     
    </props>
   </property>
.............
</bean>