码迷,mamicode.com
首页 > Web开发 > 详细

2015从头开始配置Hibernate-------Hibernate异常集锦

时间:2015-04-14 23:33:17      阅读:467      评论:0      收藏:0      [点我收藏+]

标签:required   数据库   hibernate   初学者   s2sh   异常   

  Eclipse不像是MyEclipse,它的Hibernate的使用需要进行从头配置。配置的基本方法就是把相应的jar包复制到WEB-INF/lib目录下。这些jar包,我是从

http://ncu.dl.sourceforge.net/project/hibernate/hibernate3/3.6.10.Final/hibernate-distribution-3.6.10.Final-dist.zip

这个地址下载的。

在“hibernate-distribution-3.6.10.Final\lib\required”这个目录下找到

antlr-2.7.6.jar、

commons-collections-3.1.jar、

dom4j-1.6.1.jar、

javassist-3.12.0.GA.jar、

jta-1.1.jar、

slf4j-api-1.6.1.jar

这六个jar包,再加上第一层目录下的hibernate3.jar这个jar包,还有,我连接的数据库是MySQL,还需要一个JDBC的驱动包我就加了mysql-connector-java-5.1.31-bin.jar这个包,这样这八个包就基本满足了书本上的要求了。于是,就开始试运行,结果很自然的就出现了报错,

(--------Hibernate第一个异常----缺少javax.persistence.jar------)

错误如下:

技术分享我们先不看上面的“slf4j...failed......”先看下面的关键异常:就是说:javax.persistence.EntityListeners这个类找不到。于是把这个错误放在网上搜索,结果网上说这个包在Java_ee_sdk这个库中。于是就到:

http://www.oracle.com/technetwork/java/javaee/downloads/index.html”

这个页面上下载了java_ee_sdk-7u1.zip这个文件,解压后搜索persistence.jar,果然找到了javax.persistence.jar。然后复制到lib,运行...... 这时出现了另外一个异常:

(--------Hibernate第二个异常----<hibernate-mapping>标签中,忘记配置包名属性------)

技术分享出现了这个异常时,首先我注意的是它的类型:“ org.hibernate.InvalidMappingException”,乍一看去,感觉陌生,似又熟悉。在网上一查,果不其然,是映射文件的配置问题。    再看下面的原因提示:说的是Customer这个类没有找到。我首先想的是,是不是我的Customer类的名字的问题。检查之后,命名没有一点问题。然后我就仔细的在我配置的映射文件中去找错误,还是找不到引起这个错误的原因。这时我就仔细的回想,我看书所学到的关于Hibernate的一切,觉得基本的元素都已经具备。


于是再去从<hibernate-mapping>这个标签开始看起,猛然发现这里面还需要“包”的配置。于是立刻在这个标签里面添加了属性:package="pojos" 。立刻,上面的这个错误就改变了,出现了下面的异常...

(--------Hibernate第三个异常----实体类中getter或者setter方法的命名出错------)

技术分享

这应当算是一个经典的异常了:Exception in thread "main" org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]。其中“instantiate”,这个单词的意思是“v.实例化”。意思是,不能实例化默认Tuplizer。TupliZer这个词网上也找不到翻译。不过没关系,继续往下看,找到了这句话:Could not find a getter for password in class pojos.Customer。于是想,问题大概是出在password这个属性上了。于是再去看映射文件,结果怎么也找不到错误。于是就只好去看实体类了。最后问题出在了我的password的getter和setter方法上了。是把password写成了paassword了,多写了一个a。至于为什么是这样,这里就不讨论了。发现了错误,就去改正,改正了后,就出现了以下的另外一个异常...

(--------Hibernate第四个异常----数据库没有设置主键的自动增长------)

技术分享这里这个异常是:could not insert。就是无法执行插入操作。继续往下看,看导致这个异常的原因...

技术分享

这里说的原因是:Caused by: java.sql.SQLException: Field ‘ID‘ doesn‘t have a default value。

分析异常的字面意思:ID字段没有默认值。经过网上的资料查找发现,问题出在了主键上。

有这样一个标签:

<id name="id" column="ID">

    <generator class="native"/>

</id>

其中<generator>设置了一个值为native的class属性。意思是:智能根据所连接数据库设置的增长模式,选择一种增长方式来进行插入操作。 于是,就去把主键的自动增长选项勾上。再运行,终于顺利的插入了,我所要插入的数据! 


(-------------MySQL数据库显示乱码,是因为Hibernate.cfg.xml中还有一个属性没有配置-----------------------)

这时,我又看到了一个问题,就是我插入到数据库中的汉字全都被“?”代替了。就是出现了乱码现象。

这个问题的解决,这里先给出一个治标不治本的办法。就是在<hibernate.cfg.xml>中添加:

<property name="connection.useUnicode">true</property> 

<property name="connection.characterEncoding">UTF-8</property>



现在我们该回过头来看看:异常显示的头三句:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

SLF4J: Defaulting to no-operation (NOP) logger implementation

SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

(--------Hibernate第五个异常----slf4j-simple-1.7.12.jar没有添加------)

    slf4j是负责日志的,我们在最开始也已经加入了slf4j-api-1.6.1.jar,但是还缺少一个包,还需要到网上去下载:

http://www.slf4j.org/dist/slf4j-1.7.12.zip”

解压后搜索"simple",就会找到slf4j-simple-1.7.12.jar,把它复制到lib目录下。这样问题就得到了解决。

(--------Hibernate第六个异常-----getcurrentsession的异常-----)

这个异常,在前几步进行中也会出现,只要你没有作相应的配置。这个配置是这样的:在<hibernate.cfg.xml>中添加:<property name="current_session_context_class">thread</property>

这样就会解决。


昨天调试了一个晚上的Hibernate,今天用了一下午的时间把这些成果给写出来。为了以后有的查。


本文出自 “海流之石” 博客,转载请与作者联系!

2015从头开始配置Hibernate-------Hibernate异常集锦

标签:required   数据库   hibernate   初学者   s2sh   异常   

原文地址:http://stickydream.blog.51cto.com/6388849/1632411

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!