hibernate 向mysql 存中文问题。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate 向mysql 存中文问题。。相关的知识,希望对你有一定的参考价值。

mysql数据库编码utf-8 ,
hibernate 工程编码utf-8 ,
hibernate.cfg.xml <?xml version='1.0' encoding='utf-8'?>
不涉及 容器、jsp页面编码、spring注入问题 。

@Test
public void testSave()
Org o = new Org();
o.setName("总");

Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(o);
session.getTransaction().commit();
session.close();


数据库内乱码!!!!!!

丢 .
其实数据库里面不是乱码 只是你打开的时候变成乱码而已 你可以更改一下数据库显示的模式而不是修改里面的内容
set names='gbk';
然后再查询 100%成功是中文!
上面那句话其实也没有更改数据库里面的任何内容
参考技术A 你的数据库编码设的是什么呢

编码要统一
参考技术B 在页面传输过程中 需要用到转换! 参考技术C 程序编码格式是否是UTF-8
也就是那个“总” 字的编码格式

利用hibernate+spring向mysql数据库加入数据。执行成功,但是数据库没数据。如果用hibernate查寻结果正常

不报错。
三个dao配置,dao实现类,test主含数

你应该用了spring配置式事务,被限制了修改了吧。

如下面:
<!-- 事务代理拦截器的配置 -->
<bean id="baseTransactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

这个配置中只允许 添加事务的对象中
以insert , update ,delete 开头的方法名 才允许修改数据库,
否则都是只读。

比方说我们写了一个方法,
doUpdateBook(Book book);
给这个类配置类事务,

那么它是无法修改数据库的,解决方法是,在配置事务里面吧规则加上去。

<!-- 事务代理拦截器的配置 -->
<bean id="baseTransactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="doUpdate*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

,这样,所有 doUpdate 开头的方法都可以修改数据库。
参考技术A 如果你插入以后,再调用查询方法确实能查出来,那就是你可能用了一些带界面的工具,比如SQLYOG,NAVICAT之类的,那个客户端没有刷新库表的显示 参考技术B 可能是缓存的问题,详细确定的话,把代码贴上来看看

以上是关于hibernate 向mysql 存中文问题。。的主要内容,如果未能解决你的问题,请参考以下文章

mysql 存中文失败问题

如何使用hibernate grails 3,mysql?

利用hibernate+spring向mysql数据库加入数据。执行成功,但是数据库没数据。如果用hibernate查寻结果正常

hibernate中mysql数据交互中文乱码问题

Hibernate框架Hibernate的一级缓存

Hibernate框架Hibernate的一级缓存