Hibernate 中的 UTF-8

2024-02-04

当我从 MySql 数据库的查询中检索信息时遇到问题,如下所示:

Je bâtirai 

UTF-8 字符集和 Hibernate 或 MySql 存在错误。

请问我该如何解决这个问题?

这是我的休眠设置:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- Database connection settings -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/church</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

        <property name="hibernate.connection.CharSet">utf8</property>
        <property name="hibernate.connection.characterEncoding">utf8</property>
        <property name="hibernate.connection.useUnicode">true</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>
        <!-- SQL dialect -->
        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>
        <!-- Disable the second-level cache -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <!-- créer la BD -->
        <!-- property name="hbm2ddl.auto">create</property -->
        <!-- Met la BD existante à jour -->
        <!-- property name="hbm2ddl.auto">update</property -->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!-- Mapping des classes persistantes -->

        <mapping class="com.church.metier.User" />
        <mapping class="com.church.metier.Comment" />
        <mapping class="com.church.metier.Text" />
        <mapping class="com.church.metier.MessageText" />
        <mapping class="com.church.metier.MessageVideo" />
        <mapping class="com.church.metier.News" />
        <mapping class="com.church.metier.VerseMonth" />
        <mapping package="com.church.metier" />


    </session-factory>
</hibernate-configuration>

当我检索时:

System.out.println(VerseMonthDAO.retrieveVersetMonth());

My DAO:

package com.church.DAO;

import com.church.metier.VerseMonth;

import java.util.Locale;

import org.hibernate.Session;
import org.springframework.cglib.core.Local;
import org.springframework.context.i18n.LocaleContextHolder;

import com.church.util.HibernateUtil;

public class VerseMonthDAO {

    public static void savaOrUpdate(VerseMonth verse) {
        Session hibernateSession = HibernateUtil.getSession();
        org.hibernate.Transaction transc = null;

        try {
            transc = hibernateSession.beginTransaction();
            hibernateSession.saveOrUpdate(verse);
            transc.commit();
        } catch(Exception e) {
            if (transc != null) {
                transc.rollback();
            }
            e.printStackTrace();
        } finally {
            hibernateSession.close();
        }
    }

    public static String retrieveVersetMonth() {
        Locale locale = LocaleContextHolder.getLocale();
        String language = locale.getLanguage();

        if (language.equals("en")) {
            language = "textEn";
        } else if (language.equals("in")) {
            language = "textIn";
        } else {
            language = "textFr";
        }

        Session hibernateSession = HibernateUtil.getSession();
        org.hibernate.Transaction transc = null;
        String verse = null;
        Long count;

        try {
            transc = hibernateSession.beginTransaction();
            count = ((Long) hibernateSession.createQuery("select count(*) from VerseMonth").uniqueResult());

            verse = (String) hibernateSession.createQuery
                    ("SELECT "+ language +" FROM VerseMonth verse WHERE verse.verseId = '" + count.intValue() + "'")
                    .uniqueResult();

            transc.commit();
        } catch(Exception e) {
            if (transc!=null) {
                transc.rollback();
            }
            e.printStackTrace();
        } finally {
            hibernateSession.close();
        }

        return verse;
    }

    public static String retrieveSourceMonth() {
        Locale locale = LocaleContextHolder.getLocale();
        String language = locale.getLanguage();

        if (language.equals("en")) {
            language = "sourceEn";
        } else if (language.equals("in")) {
            language = "sourceIn";
        } else {
            language = "sourceFr";
        }

        Session hibernateSession = HibernateUtil.getSession();
        org.hibernate.Transaction transc = null;
        String source = null;
        Long count;

        try {
            transc = hibernateSession.beginTransaction();
            count = ((Long) hibernateSession.createQuery("select count(*) from VerseMonth").uniqueResult());

            source = (String) hibernateSession.createQuery
                    ("SELECT "+ language +" FROM VerseMonth verse WHERE verse.verseId = '" + count.intValue() + "'")
                    .uniqueResult();

            transc.commit();
        } catch(Exception e) {
            if (transc!=null) {
                transc.rollback();
            }
            e.printStackTrace();
        } finally {
            hibernateSession.close();
        }

        return source;
    }
}

我的数据库:

+---------+----------------+----------------+----------------+-------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
| verseId | SOURCEEN       | SOURCEFR       | SOURCEIN       | TEXTEN                                                                                                | TEXTFR                                                                                              | TEXTIN                                                                                              |
+---------+----------------+----------------+----------------+-------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
|       1 | Je bâtirai    | Je bâtirai    | Je bâtirai    | Je bâtirai                                                                                           | Je bâtirai                                                                                         | Je bâtirai                                                                                         |
+---------+----------------+----------------+----------------+-------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+

谢谢你的回答


我找到答案 使用以下参数配置 Hibernate 后:

<property name="hibernate.connection.CharSet">utf8</property>
<property name="hibernate.connection.characterEncoding">utf8</property>
<property name="hibernate.connection.useUnicode">true</property>

我们还必须在 web.xml 中使用以下参数将 Spring 配置为 UTF-8:

<filter>
    <filter-name>SetCharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SetCharacterEncodingFilter</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

它有效!谢谢大家

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate 中的 UTF-8 的相关文章

随机推荐