因为是自学的hibernate,所以我先是上网找了些hibernate的视频来看了几天,再浏览的官方文档,最后才开始动手做实践操作,没想到刚开始就出问题了,我将官方文档上的hibernate.cfg.xml完全copy到项目的src目录下,然后修改数据库连接信息,搭建好log4j、junit,当我满怀希望的开始我的第一个小程序时,才发现我下载的hibernate是4.2.21,而看的视频是hibernate3的视频,视频中创建SessionFactory的方法:
SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
AnnotationConfiguration类和buildSessionFactory()参数为空的方法已经过期,然后我查官方文档后改成了:
SessionFactory sf = new Configuration().configure().buildSessionFactory(new StandServiceRegistryBuilder().build());
来创建,结果myeclipse竟然显示找不到 org.hibernate.boot.registry.StandardServiceRegistryBuilder这个包,我顿时就蒙逼了,这是个什么情况,官方手册上明明白白写着,竟然没有,然后我在百度一通好找,什么收获也没有,最后在hibernate4.2.21的官方API中找了半天,发现竟然真的没有这个包,然后本着版本可能有问题的想法上hibernate官网下载了两个最新版的hibernate5.2.10和hibernate4.3.11,因为看见hibernate5.2.10是今年刚出的,可能有BUG,所以多下了几个,然后我在5.2.10中没有找到manual手册,因此看不懂最新版的,所以就用的4.3.11版的,查手册和API文档,发现获得SessionFactory的写法和上面的图一样,只是这回API中有org.hibernate.boot.registry.StandardServiceRegistryBuilder这个类了,然后高高兴兴的一步步写,用junit测试,竟然不发SQL语句,在myeclips中什么错误也不报,这就很尴尬了,我又查了半天,能用的方法都用上了,最后在:
SessionFactory sf = new Configuration().configure().buildSessionFactory(new StandServiceRegistryBuilder().build());
这段代码上加了try-catch,myeclips才报错,报的错也奇怪:
方言没有配置,于是我又检查了好几遍自己在hibernate.cfg.xml中的配置,发现都没问题,没辙了,在这都折腾好几个小时了,最后都快要放弃的时候,还是觉得度娘上绝对有大牛前辈遇到过这个问题,应该有答案,只是我还没找到而已。终于,功夫不负有心人,真的让我找到了一篇博客,那位前辈在上面说这是官方文档上的错误,官方文档上的写法没有拿到hibernate.dialect的配置,正确的写法是:
最后,那个junit不报错,我觉得应该是一个BUG
总结:有付出就会有回报,不管多么困难的问题只要你努力的去找答案,总会找到的!希望各位小伙伴们都能克服学习的困难哦!