Hibernate Java EE+;冬眠+;Glassfish 3.1+;MySQL 5.5.16->;utf不';行不通

Hibernate Java EE+;冬眠+;Glassfish 3.1+;MySQL 5.5.16->;utf不';行不通,hibernate,jakarta-ee,utf-8,glassfish,Hibernate,Jakarta Ee,Utf 8,Glassfish,我无法让hibernate将utf8字符写入数据库。若我使用phpmyadmin或类似工具手动编写它们,它会显示在web中,一切都正常。但如果我手动填写表单并提交,那么使用hibernate将其保存到DB,它会给出ÄÄÄÄÄ。MySQL中的所有内容都是utf-8: mysql> SHOW VARIABLES LIKE 'collation%'; +----------------------+-------------------+ | Variable_name | Val

我无法让hibernate将utf8字符写入数据库。若我使用phpmyadmin或类似工具手动编写它们,它会显示在web中,一切都正常。但如果我手动填写表单并提交,那么使用hibernate将其保存到DB,它会给出
ÄÄÄÄÄ
。MySQL中的所有内容都是utf-8:

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | utf8_general_ci   |
| collation_server     | utf8_general_ci   |
+----------------------+-------------------+

mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+
varchar表格中的所有表格/列都是
utf-8 general

我的hibernate-config.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
   http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/tx 
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
      ">

    <!-- Enable annotation style of managing transactions -->
    <tx:annotation-driven transaction-manager="transactionManager" /> 

    <!-- Declare the Hibernate SessionFactory for retrieving Hibernate sessions -->
    <!-- See http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/orm/hibernate3/annotation/AnnotationSessionFactoryBean.html -->       
    <!-- See http://docs.jboss.org/hibernate/stable/core/api/index.html?org/hibernate/SessionFactory.html -->
    <!-- See http://docs.jboss.org/hibernate/stable/core/api/index.html?org/hibernate/Session.html -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <!-- init-method="createDatabaseSchema" -->
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="lt.database.model" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.connection.charSet">UTF-8</prop>                
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

    <!-- Declare a datasource that has pooling capabilities--> 
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close"
    p:driverClass="com.mysql.jdbc.Driver"
    p:jdbcUrl="jdbc:mysql://localhost/aukcionas?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"
    p:user="root"
    p:password=""
    p:acquireIncrement="5"
    p:idleConnectionTestPeriod="60"
    p:maxPoolSize="100"
    p:maxStatements="50"
    p:minPoolSize="10" />

    <!-- Declare a transaction manager-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"
          p:sessionFactory-ref="sessionFactory" />

</beans>
<filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping> 

符合事实的
UTF-8
UTF-8
org.hibernate.dialogue.mysqldialogue
符合事实的
那为什么我还是不能让它工作呢?我使用:

  • 玻璃鱼3.1
  • MySQL 5.5.16
  • 冬眠3
  • Spring 3.0.2
  • Spring Security 3.0.7

    • 由我自己修复。将此添加到web.xml文件:

      <?xml version="1.0" encoding="UTF-8"?>
      <beans  xmlns="http://www.springframework.org/schema/beans"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:p="http://www.springframework.org/schema/p"
              xmlns:tx="http://www.springframework.org/schema/tx"
              xmlns:context="http://www.springframework.org/schema/context"
              xsi:schemaLocation="
         http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://www.springframework.org/schema/tx 
         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context-3.0.xsd
            ">
      
          <!-- Enable annotation style of managing transactions -->
          <tx:annotation-driven transaction-manager="transactionManager" /> 
      
          <!-- Declare the Hibernate SessionFactory for retrieving Hibernate sessions -->
          <!-- See http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/orm/hibernate3/annotation/AnnotationSessionFactoryBean.html -->       
          <!-- See http://docs.jboss.org/hibernate/stable/core/api/index.html?org/hibernate/SessionFactory.html -->
          <!-- See http://docs.jboss.org/hibernate/stable/core/api/index.html?org/hibernate/Session.html -->
          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <!-- init-method="createDatabaseSchema" -->
              <property name="dataSource" ref="dataSource" />
              <property name="packagesToScan" value="lt.database.model" />
              <property name="hibernateProperties">
                  <props>
                      <prop key="hibernate.connection.useUnicode">true</prop>
                      <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                      <prop key="hibernate.connection.charSet">UTF-8</prop>                
                      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                      <prop key="hibernate.show_sql">true</prop>
                  </props>
              </property>
          </bean>
      
          <!-- Declare a datasource that has pooling capabilities--> 
          <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
          destroy-method="close"
          p:driverClass="com.mysql.jdbc.Driver"
          p:jdbcUrl="jdbc:mysql://localhost/aukcionas?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"
          p:user="root"
          p:password=""
          p:acquireIncrement="5"
          p:idleConnectionTestPeriod="60"
          p:maxPoolSize="100"
          p:maxStatements="50"
          p:minPoolSize="10" />
      
          <!-- Declare a transaction manager-->
          <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"
                p:sessionFactory-ref="sessionFactory" />
      
      </beans>
      
      <filter>
              <filter-name>encodingFilter</filter-name>
              <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
              <init-param>
                  <param-name>encoding</param-name>
                  <param-value>UTF-8</param-value>
              </init-param>
              <init-param>
                  <param-name>forceEncoding</param-name>
                  <param-value>true</param-value>
              </init-param>
          </filter>
          <filter-mapping>
              <filter-name>encodingFilter</filter-name>
              <url-pattern>/*</url-pattern>
          </filter-mapping> 
      
      
      编码滤波器
      org.springframework.web.filter.CharacterEncodingFilter
      编码
      UTF-8
      强制编码
      符合事实的
      编码滤波器
      /*
      
      您确定传递给hibernate的值正确吗?您是否在调用hibernate API检查之前记录了该值?