java - 当我将其部署在 openshift 上时,我的 WEB 应用程序中的搜索仅适用于拉丁符号,但它在我的本地计算机上运行良好

标签 java hibernate spring-mvc openshift

我有一个问题。我通过 Spring MVC 和 Hibernate 制作了一个 WAB 应用程序,它有一个搜索。问题是当我在 openshift 上部署 WEB 应用程序时,搜索仅适用于拉丁符号。它不适用于西里尔字母。但它在我的本地机器上运行得很好。所以我不知道它会是什么。我在 openshift 上有与本地计算机上相同的数据库,我转储了数据并将其导入到 openshift。

这是搜索的方法:

public List<News> getNewsWithSubstring(String str) {
    Session session = sessionFactory.getCurrentSession();
    Criteria crt = session.createCriteria(News.class);
    Disjunction disjunction = Restrictions.disjunction();
    disjunction.add(Restrictions.like("titleUa", "%" + str + "%"));
    disjunction.add(Restrictions.like("titleEn", "%" + str + "%"));
    disjunction.add(Restrictions.like("titleRu", "%" + str + "%"));
    disjunction.add(Restrictions.like("descriptionUa", "%" + str + "%"));
    disjunction.add(Restrictions.like("descriptionEn", "%" + str + "%"));
    disjunction.add(Restrictions.like("descriptionRu", "%" + str + "%"));
    crt.add(disjunction);
    return crt.list();
}

这是连接到数据库的设置(来自 springServlet-context.xml):

 <bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.goldcamtech.model"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="c3p0.idle_test_period">120</prop>
            <prop key="hibernate.connection.characterEncoding">utf8</prop>
        </props>
    </property>
</bean>

<bean name="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://127.18.97.4:3306/gctech_site?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8"/>
    <property name="username" value="username"/>
    <property name="password" value="password"/>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

也许有人有什么想法?为什么它在我的本地计算机上可以使用拉丁语和西里尔语,但在 openshift 上却不能使用西里尔语?谢谢!

最佳答案

问题很可能在于本地计算机上的 MySQL 和 OpenShift 上的 MySQL 的默认配置。我建议比较表/数据库上的字符集。如果您在创建表/数据库时没有明确指定,MySQL 将使用 my.cnf

中的默认值

另请参阅:Database Character Set and Collation

附注另请注意,像这样的代码

disjunction.add(Restrictions.like("titleUa", "%" + str + "%"));

在某些情况下可能会出现错误(例如,如果用户的字符串包含%_字符),甚至可能导致SQL注入(inject)。

关于java - 当我将其部署在 openshift 上时,我的 WEB 应用程序中的搜索仅适用于拉丁符号,但它在我的本地计算机上运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30863288/

相关文章:

json - 使用 Spring MVC、Jackson 和 Hibernate 序列化具有多对多关系的对象

java - 将 Quarkus 和 Hibernate 与 db2/400 结合使用

java - RestTemple 调用后异常

java - 使用Spring Jaxb2Marshaller生成动态命名空间前缀

java - 如何在任务正在进行时在 Java Swing 中获取自定义的 gif

java - 交易不活跃 - hibernate - JPA

spring-mvc - Spring Web 连接到嵌入 Jboss 服务器 7.1.1 的 HornetQ JMS

java.lang.IllegalStateException : Neither BindingResult nor plain target object for bean name 'command' available as request attribute 错误

java - Spring Aop 依赖关系

java - OnClickListener 无法解析为类型 (Eclipse)