spring - Hibernate Session 的 get() 函数检索问号而不是希腊字符

标签 spring hibernate tomcat encoding utf-8

我有一个使用 spring 和 hibernate 的网络应用程序。我的 hibernate session 工厂在 Spring 配置为:

<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);
}

所以我正在为特定的 id 调用 hibernate session 的 get 方法,我希望有一个 DsActions 类型的实例。

当我从本地 Tomcat 实例(通过 netbeans 运行)运行它时一切正常。

当我在远程 tomcat 服务器上安装它时,DsActions 的实例似乎有编码问题。检索 DsActions 实例的字段时,我得到问号 (??? ???????? ??????)。文本应该是希腊字符

我很困惑,我不明白为什么在第一种情况下它可以工作,而在第二种情况下却不行。 注意:数据是由同一数据库服务器检索的,因此没有区别。唯一的区别是运行应用程序的机器。

提前谢谢大家。

最佳答案

我很确定 Hibernate 正确地检索了该字段,问题在于您输出这些字符的方式。

作为快速检查,您可以在代码中添加诸如 f.contains("?") 之类的条件并输出其结果 - 它应该为 false(如果当然,原始字符串不包含 ?

有关输出中可能出现的问题,请参阅 Unicode - How to get the characters right? .

关于spring - Hibernate Session 的 get() 函数检索问号而不是希腊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5883008/

相关文章:

java - Spring CORS 设置

java - 为什么spring和hibernate中的exception是最多unchecked exception?

Hibernate Criteria API - 访问连接属性

java - Spring 与 hibernate

java - Tomcat 服务器上的 Angular 应用程序 : Unable to find/app. js 404 错误

java - Hibernate 5.0.1 最后的问题;

apache - 使用 Apache/Tomcat + 虚拟主机部署多个 grails 应用程序

java - 并发请求事务以防止不必要的持久化

spring - java.sql.SQLFeatureNotSupportedException : Method org. postgresql.jdbc4.Jdbc4Connection.isValid(int) 尚未实现。在 Spring 启动

java - 使用innerBean时出现错误