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

时间:2015-06-16 09:10:03

标签: java hibernate spring-mvc openshift

我有问题。我通过Spring MVC& amp;做了一个WAB应用程序。 Hibernate,它有一个搜索。问题是当我在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();
}

这是连接到db的设置(来自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>

也许有人有任何想法?为什么它在我的本地机器上使用拉丁语和西里尔语但在开放式移动机器上没有使用西里尔语?谢谢!

1 个答案:

答案 0 :(得分:1)

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

中的默认值

另请参阅:Database Character Set and Collation

P.S。还要注意,像这样的代码

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

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