2011-05-04 63 views
1

我有一個使用spring和hibernate的web應用程序。我的休眠會話工廠在春季配置爲:Hibernate Session的get()函數檢索問號而不是希臘字符

<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="myDataSource" /> 
    <property name="configurationClass"> 
     <value>org.hibernate.cfg.AnnotationConfiguration</value> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2005Dialect</prop> 
      <prop key="hibernate.cache.use_query_cache">false</prop> 
      <prop key="hibernate.cache.use_second_level_cache">false</prop> 
     </props> 
    </property> 
    <property name="packagesToScan"> 
     <list> 
      <value>com.example.dslibweb.model</value> 
     </list> 
    </property> 
</bean> 

數據源爲:

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="${jdbc.driverClassName}" /> 
    <property name="url" value="${jdbc.url}" /> 
    <property name="username" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
    <property name="maxActive" value="${jdbc.maxConnections}" /> 
</bean> 

和屬性文件中的數據來源是:

jdbc.username=sa 
jdbc.password=*** 
jdbc.url=jdbc:sqlserver://10.62.0.105:1433;databaseName=example;useUnicode=true;characterEncoding=utf-8 
jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver 
jdbc.maxConnections=-1 

我有一個電話:

DsActions action = (DsActions) this.hibernateCriteriaCommons.findById(id, new DsActions()); 

和findById被定義爲:

public T findById(String id, Object model) { 
    return (T) this.sessionFactory.getCurrentSession().get(model.getClass(), id); 
} 

所以我打電話Hibernate的Session的特定ID get方法,我希望類型DsActions的一個實例。

當我從本地Tomcat實例(通過netbeans運行)運行它時,所有工作都很好。

當我將它安裝在遠程tomcat服務器上時,DsActions的實例似乎有編碼問題。當回顧DsActions實例的字段時,我會收到問號(??? ?????? ??????)。該文本應該是希臘字符

我很困惑,我不明白爲什麼在第一種情況下它工作,而不是在第二個。 注意:數據是由同一個數據庫服務器檢索的,所以沒有區別。唯一的區別是應用程序正在運行的機器。

謝謝大家提前。

+0

如果所有其他東西都是一樣的,那麼檢查Tomcat配置 – bpgergo 2011-05-04 12:13:39

+1

也寫了「當回顧DsActions實例的字段時,我收到問號(??? ?????? ??????)。 「你知道它在哪裏?在Tomcat日誌中?用servlet在html中返回? – bpgergo 2011-05-04 12:15:21

+0

感謝您的反饋。當你說Tomcat配置時,你的意思是servr.xml文件?我檢查了這兩個文件是相似的。當我在日誌文件中打印輸出並在jsp上顯示時,我會得到這些問號。讓我發瘋的事情是它在Tomcat的一個實例上工作,而不在另一個上 – alex 2011-05-05 05:38:38

回答

4

我非常確定Hibernate能夠正確地檢索這個字段,並且問題在於你輸出這些字符的方式。

作爲一個快速檢查,您可以添加一個條件,如f.contains("?")到您的代碼並輸出結果 - 它應該是false(如果原始字符串不包含? s,當然)。

對於輸出中可能存在的問題,請參閱Unicode - How to get the characters right?