php+mysql,在数据库中看中文出现乱码,但是在页面输出的时候是正常的!

php+mysql,在数据库中看中文出现乱码,但是在页面输出的时候是正常的!,第1张

数据数据表 录入数据 查看数据 保持编码格式一致\r\n如果需要显示到页面的话,用到的文件编码也要一致 \r\n例如:php、html、mysql 编码都一致,页面显示才正常\r\n\r\n出现问题可以查看数据库编码、表编码、字段编码 看是否一致

主键是必须有的,要么是单字段的id,要么是组合的composite-id,这一点可以从hibernate-mapping-2.0.dtd的第37行看的出来。还有参考手册的4.1.4节也说:“Mapped classes must declare the primary key column of the database table.”想象一下,没有主键,session如何load一个class呢,如何判断这个类是持久化对象还是游离对象还是临时对象?

id应该是必须有的,但id不一定要对应数据库表的主键,只要能唯一标识一条纪录就行。如果你的表没有主键,那你可以选取若干个column作为composite-id(大不了用所有的column),但很可能会带来很多不便。

首先这个问题与主键生成方式没有关系,况且楼主可能使用的是Mysql数据库,因此采用identity生成方式完全正确。

其次关于load取数据出现问题是因为取数据的表有级联关系,在我们分析此问题之前,我们先要明白hibernate中什么是load,什么是get,它们两者之间有什么区别呢??

只要你在以往的开发过程中稍加注意,不难发现,假如有两张表,他们为一对多关系,现在开始查询,如果使用get,那么查询的结果将会是把2张表的数据全部持久化到内存中(如果关系比较深你还打算用它吗?),如果是采用load的方式,那么将只会是把其中一张表(A表)的数据加载到内存中,而另一张表(B表)只存在一个标识,原则上是等页面显示时,如果只要显示A表数据,那么程序直接内存中找A表数据,如果还要显示B表数据,那么就要通过内存中B表的标识重新查找数据库,此时,问题出来了,假如你在DAO中,session.load之后你结束了session的生命周期,那么在页面要显示B表数据,而B表在内存中只是一个标识啊,你的session又处于关闭状态,它无法找啊,这就会出现上面你遇到的那个问题,因此,假如我们不关闭session,页面可以正常显示2张表的数据了,但是问题又来了,如果不关闭session,那么对象将一直以持久态的形式保存在内存中,留下的隐患难以想象(比如该对象容易数据混乱等等),千万不要说session.clear之内的东西也可以把对象变游离态之内的话啊,如果你彻底用session.clear取代session.close的话,嘿嘿,自己去尝试吧,当问题显现出来的时候痛苦吧^_^!好了,我还是说下解决方法吧~最好的方法就是将DAO中的session与事物全部抽取出来做成一个hibernate过滤器,这样既能解决你上面的问题,又能大大减少DAO中的代码...好处很多的哦,使用一次之后就容易上瘾-_-我空间里好象有,你可以去看看~稍微修改就可以用!(最好和工具类一起搭配使用,超爽滴!)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7548165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存