我在用Struts+Spring+Hibernate时遇到了Could not open Hibernate Session for transaction最后我解决了这个问题。我现在把问题贴在了下面!我最终确定是因为数据链接自动关闭,而不是spring和hibernate的问题。
解决办法是:
1看看数据库的jdbc驱动是否支持重连;
注意:mysql的重连autoReconnect参数不能使连接重连
2寻找支持重连的连接池。
注意:c3p0连接池支持重连;重连参数是:
idleConnectionTestPeriod 设置空闲连接测试周期
preferredTestQuery : 设置一查询语句,用于重连测试
testConnectionOnCheckin设置为true
testConnectionOnCheckout设置为true
javaxservletServletException: Could not open Hibernate Session for transaction; nested exception is orghibernateTransactionException: JDBC begin failed:
orgapachestrutsactionRequestProcessorprocessException(RequestProcessorjava:535)
orgapachestrutsactionRequestProcessorprocessActionPerform(RequestProcessorjava:433)
orgapachestrutsactionRequestProcessorprocess(RequestProcessorjava:236)
orgapachestrutsactionActionServletprocess(ActionServletjava:1196)
orgapachestrutsactionActionServletdoPost(ActionServletjava:432)
javaxservlet>
1、首先定义一个接口,参数为sql语句,然后定义用一个类来实现这个接口。
2、使用hibernate的getHibernateTemplate方法获得对象,获得sesson工厂,建立数据库连接即可。
3、然后就可以使用数据库的 *** 作,比如Statement对象进行相关 *** 作,此方法中接收的参数使用;隔开的,所以对接收参数进行处理。
4、数据库的连接是非常宝贵的资源,在执行完sql语句后,不要忘记关闭相关的数据库连接。
5、在control层调用service层的方法,使用stringbuffer动态拼接好相关的sql语句即可。
6、最后看下执行的后台输出以及看下数据库中是否建了相关的表,这里使用datastudio工具进行查看。
您可以
aStudentgetTeachers()add(aTeacher);
这样一个学生关联老师的数量是少的。在学生这一侧做 *** 作比在老师一侧做 *** 作关联的数据量少。提高效率。
否则,就需要使用本地SQL的方式进行 *** 作了。但是这样就又失去了使用Hibernate的意义了。使用Hibernate的一般原则是尽量通过Hibernate提供的API来完成数据库 *** 作,这样会简化代码编写,提高开发效率。但是有的时候考虑程序运行效率和需求,需要使用本地SQL的方式来 *** 作数据库,目的是提高效率。在这样的矛盾中,根据需求进行取舍吧。
以上就是关于为什么会出现很抱歉,服务器忙请稍侯!Could not open Hibernate Session for trans全部的内容,包括:为什么会出现很抱歉,服务器忙请稍侯!Could not open Hibernate Session for trans、关于hibernate的 org.hibernate.exception.SQLGrammarException:、在hibernate多对多使用连接表双向关联,添加新关系时,hibernate会把所有的关联先查询出来,如何提高效率等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)