得想想Hibernate 的生存周期和运行过程了
解决方案 »
- struts2问题..请高手指教..<s:textfield>
- java调用bat文件
- -----------------ibatis取不到数据---------------
- hibernate3.0 中文检索
- jdom如何解析属性里有冒号的XML?谢谢!
- html:text 里如何对数据(保留二位小数)显示,急
- help help
- 高手请给看看weblogic为什么不rollback呀?
- “一旦一个方法抛出一个异常后,那么该方法就再也不能返回到它的调用者了” 好象有错!?
- 请教一二
- 求助各位老师?????
- [200分]在两个有关系的EntityBean中如何在一个Ejb的Eql中关联另一个Ejb的属性进行查询????如何设置
这可能是因为在hibernate里面默认情况下hibernate.connection.autocommit是false的,也就是说insert执行了,但没有提交,关闭服务器的时候才提交的
============================================================
这个也不大可能,因为"查看数据库,数据插入到了数据库中.",如果没有提交的话,数据库应该是没有值的.
============================================================
这个也不大可能,因为"查看数据库,数据插入到了数据库中.",如果没有提交的话,数据库应该是没有值的.
======================================
到底有没有值呢?
我这题是现场调试的,唉...丢脸啊
重启后web容器没问题啦,就OK了。
当你用Junit测试的时候当然可以测成功,因为hibernate是先查看缓存的.如果缓存里面有它想要的东西就不查数据库了,直接拿过来用.如果没有才查的.
至于LZ说的关闭服务器以后,重起就可以登陆了.那应该是在关闭服务器的同时,hibernate commit了缓存里面的数据.
或者一下
如果真的有问题的话
只有一种可能 在数据插入之后 数据库出现问题 重启
导致 connection reset
web server 无法连接到数据库
而junit重新构建sessionfactory 可以连接到重启后的数据库
个人认为2中解决方法:
1.在getUserByNameAndPassword(用户名,密码)方法中加上HibernateSessionFactory.getSession().clear();
2.在session.save()方法里面(也就是insert)在插入了注册的用户信息,事务提交后,调用session.close()方法将session关闭
会不会是在二级缓存的时候出了问题,我记得在二级缓存中好像有一个类似“黑名单”的东西,里面保存了没有记录的查询语句,当hibernate发行这条查询语句在这个“黑名单”中的时候,它就不会继续查询数据库了,而是直接返回没有找到数据。但是在执行了save操作之后这条查询语句怎么会进入黑名单的呢?好像又不符合逻辑!以上是小弟的分析,希望抛砖引玉,大家继续讨论!
-----------
xiaolei2656277() ( ) 信誉:100 Blog 2007-3-20 11:05:52 得分: 0
应该是hibernate缓存的问题.在注册完以后只是把数据保存在了缓存里面,而没有提交到数据库.
当你用Junit测试的时候当然可以测成功,因为hibernate是先查看缓存的.如果缓存里面有它想要的东西就不查数据库了,直接拿过来用.如果没有才查的.
至于LZ说的关闭服务器以后,重起就可以登陆了.那应该是在关闭服务器的同时,hibernate commit了缓存里面的数据.
这句话是说直接到数据库里查看的,还是用hibernate查询出来的
如果是后者,那么很可能是session的问题,flush一下就行了
前者的话,汗,请高手来答吧...
解决方式可以有好几种了。将获得数据该成每次都从数据库拿的方式,或者是上面说的将session里的流清空掉,还可以再开起一个连接。你可以根据需要来决定。
至于配置,可以不需要做高级的属性设置的。