Проблема получения строки utf-8 из mysql с использованием hibernate3 - PullRequest
3 голосов
/ 04 сентября 2011

Когда я пытаюсь загрузить объект (строку) из базы данных mysql, свойства строки не загружаются должным образом, и в результате при их печати ничего не отображается.

вот мой конфигурационный файл hibernate:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>    
    <property name="connection.driver_class">
       com.mysql.jdbc.Driver
    </property>
    <property name="connection.url">
      jdbc:mysql://localhost:3306/demo_hib_1
    </property>
    <property name="connection.username">root</property>
    <property name="connection.password"> </property>
    <property name="pool_size">5</property>
    <property name="show_sql">true</property>
    <property name="dialect">
      org.hibernate.dialect.MySQLDialect
    </property>
    <!-- Mapping files -->

     <mapping resource="com/navid/Person.hbm.xml"/>

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

Я попытался добавить кодировку в URL-адрес подключения:

jdbc:mysql://localhost:3306/demo_hib_1&characterEncoding=UTF-8

и получил исключение гибернации:

Exception in thread "main" org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2246)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2158)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2137)
    at com.navid.Main.main(Main.java:31)
Caused by: org.dom4j.DocumentException: Error on line 10 of document  : The reference to entity "characterEncoding" must end with the ';' delimiter. Nested exception: The reference to entity "characterEncoding" must end with the ';' delimiter.
    at org.dom4j.io.SAXReader.read(SAXReader.java:482)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2238)
    ... 3 more

Ответы [ 2 ]

9 голосов
/ 04 сентября 2011

Файл конфигурации hibernate представляет собой файл XML, поэтому необработанные символы и символы не допускаются

Два варианта, которые приходят на ум (но не проверенные!), Первый - использовать escape-последовательность XML &amp;:

<property name="connection.url">
  jdbc:mysql://localhost:3306/demo_hib_1?useUnicode=true&amp;characterEncoding=UTF-8
</property>

Или используя синтаксис имя + значение, для которого не требуется & escaping:

<property name="connection.url" value="jdbc:mysql://localhost:3306/demo_hib_1?useUnicode=true&characterEncoding=UTF-8" />

Обратите внимание, что я также добавил второй вариант, думаю, вам нужны оба

0 голосов
/ 05 сентября 2011

Вы пытались добавить

<property name="connection.characterEncoding">UTF-8</property>

в конфигурацию фабрики сеанса.

Из документации Hibernate:

Свойства произвольного соединения можно задать, добавив "hibernate".connection "к имени свойства соединения.Например, вы можете указать свойство соединения charSet, используя hibernate.connection.charSet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...