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 的相关文章

  • 是否有任何理由使用 ZoneId.of("UTC") 而不是 ZoneOffset.UTC ?

    有什么理由使用ZoneId of UTC 代替ZoneOffset UTC 我们知道两者之间的区别 如ZoneOffset UTC 和 ZoneId of UTC 之间有什么区别 https stackoverflow com questi
  • Byte[] 和 java.lang.OutOfMemoryError 按位读/写文件

    我正在努力擦除 Android 中的一些可用空间 这是我的代码 private void creatingFileDelete int size int passMode File lastFile new File Environment
  • 新行分隔符不适用于 group_concat 函数

    我有一根绳子 name lastname name2 lastname2 包含数据库表中的值 我想显示它 喜欢 name lastname name2 lastname2 我使用 group concat 函数 它适用于逗号分隔符 但我需要
  • Sails 嵌套模型集合

    我有 3 个型号 用户模型 module exports schema true attributes login type string required true hosts collection host via owners acc
  • 简单的Java程序插入USB热点后速度慢100倍

    我有以下Java程序 class Main public static void main String args throws java io IOException long start System nanoTime java io
  • 运行源代码中包含 Unicode 字符的 Python 2.7 代码

    我想运行一个在源代码中包含 unicode utf 8 字符的 Python 源文件 我知道这可以通过添加评论来完成 coding utf 8 在一开始的时候 但是 我希望不使用这种方法来做到这一点 我能想到的一种方法是以转义形式编写 un
  • 相对重力

    我最近开始使用jMonkey引擎 这非常好 但我在尝试实现相对重力时陷入了困境 我想让行星彼此围绕轨道运行 不一定是完美的圆形轨道 取决于速度 所以每个对象都应该影响其他对象 我现在拥有的 关闭全球重力 bulletAppState get
  • java springrabbit - 优雅地拒绝消息

    我有以下侦听器方法 Override public void onMessage Message message Channel channel try do something bad catch Exception e try long
  • Mysql使用触发器建表

    我尝试在 Mysql 触发器内创建表 但没有创建 如何使用触发器创建表 这里传递的表的名称是动态的 据我所知 在触发器内创建表是不可能的 看这里 http forums mysql com read php 99 121849 122609
  • 将序列化数据发送到 servlet 时出现 java.io.EOFException

    我正在尝试从 Java 本地应用程序上传一个包含文件到服务器的对象 我的计划是 在 tomcat 上运行的 servlet 将使用以下方法获取对象ObjectInputStream in the doGet方法 但我得到一个EOFExcep
  • Java 日期和 MySQL 时间戳时区

    我正在编辑一段代码 其基本功能是 timestamp new Date 然后坚持下去timestamp中的变量TIMESTAMPMySQL 表列 然而 通过调试我看到Date显示在正确时区的对象 GMT 1 当持久化在数据库上时 它是GMT
  • 如何在 laravel 中查询 json 列?

    我用的是 Laravel 5 6 我有一块田地 字段的数据类型为json 字段 desc 字段 的值如下所示 code 1 club CHE country ENGLAND code 2 club BAY country GERMANY c
  • 如何让 Camel FTP 按需只获取一次

    我对骆驼还很陌生 我一直在尝试让 Camel 根据需要仅通过 FTP 获取单个文件一次 我无法让它发挥作用 这是我尝试过的 让我知道什么是最好的方法以及我的代码有什么问题 1 读取文件后发送一条空消息当收到空消息时 停止路由 from di
  • 为什么找不到 getservletcontext?

    我正在尝试使用getServletContext getRealPath 但我不断收到此错误 cannot find symbol symbol method getServletContext location interface jav
  • Java 中有类似 .NET 的 NotImplementedException 的东西吗?

    有没有类似 NET 的东西NotImplementedException在Java中 康芒斯朗 http commons apache org proper commons lang javadocs api 2 6 org apache
  • 不鼓励在Web应用程序中使用线程吗?

    我们与同事就在 Java 的 Web 应用程序中使用线程进行了激烈的讨论 他们的观点是 不建议在 Java Web 应用程序中使用线程 因为它们不受容器管理 一般来说 我对此表示同意 因为线程可能会干扰容器 但是 如果它不是 Java EE
  • 使用替换但不使用根元素的 Jaxb 继承

    我正在浏览布莱斯的博客http blog bdoughan com 2010 11 jaxb and inheritance using substitution html http blog bdoughan com 2010 11 ja
  • 如何使用 iBatis (myBatis) 的注释进行 IN 查询?

    我们只想在 MyBatis 中使用注释 我们确实在努力避免使用 xml 我们尝试使用 IN 子句 Select SELECT FROM blog WHERE id IN ids List
  • 如何使用 Hibernate 解决错误“由于启用了‘集合获取分页失败’而失败”?

    我正在尝试使用 Spring Data 查询数据库中表 Product 的前 5 个元素 然后是接下来的 5 个元素等 Pageable 但是我的表 产品 包含与另一个名为 公司 的表的关系 所以我需要做一个join fetch也可以获取公
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi

随机推荐