posts - 56, comments - 54, trackbacks - 0, articles - 4
   ::  ::  :: 联系 :: 聚合  :: 管理

Hibernate的Encode的问题

Posted on 2005-12-02 10:14 Terry的Blog 阅读(550) 评论(0)  编辑  收藏 所属分类: java语言
        众所周知,com.mysql.jdbc.Connection的构造函数public java.sql.Connection connect(String url, Properties info)会在构造的时候接受一个Properties型的参数,其中的“useUnicode”和“characterEncoding”决定了它是否在客户端和服务器端传输过程中进行Encode,以及如何进行Encode。详细可参见private void checkServerEncoding()方法。
Hibernate使用net.sf.hibernate.cfg.Environment来存储系统级的所有属性,而用net.sf.hibernate.cfg.Settings来存储Hibernate的设定。
但是net.sf.hibernate.cfg.Environment里保存的Properties不是直接提供给com.mysql.jdbc.Connection使用的。
net.sf.hibernate.connection.ConnectionProviderFactory会在public void configure(Properties props)中使用用public static Properties getConnectionProperties(Properties properties)方法进行筛选。
带有特定前缀public static final String CONNECTION_PREFIX = "hibernate.connection"并且没有被放到private static final Set SPECIAL_PROPERTIES里的属性才会被留下来。
然后,它在public Connection getConnection()中建立连接的时候使用的是它自己筛选完之后的private Properties connectionProps属性。
所以答案就很明显了。
使用hibernate.cfg.xml的话,在<session-factory>和</session-factory>之间加入这么一段:
java代码: 

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


如果是些程序的话,在创建完net.sf.hibernate.cfg.Configuration、并使用configure()读取完配置文件之后,buildSessionFactory()之前,执行如下代码:
java代码: 

            Properties extraProperties = new Properties();
            extraProperties.put("hibernate.connection.useUnicode", "true");
            extraProperties.put("hibernate.connection.characterEncoding", "UTF-8");
            myConfiguration.addProperties(extraProperties);

OK!万事大吉了!

*
直接写在connection url后面也可以
Hibernate配置文件使用xml格式吗?试试看把connection url后面的 & 符号用xml转义符替代试试看,或者用<![CDATA[]]>也行。

只有注册用户登录后才能发表评论。


网站导航: