在学习Hibernate例子的时候遇到了以下问题
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43)
at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:86)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:123)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:118)
at com.itheima.dao.HibernateDemo1.main(HibernateDemo1.java:44)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 5 more
经查明原因发现需要JAXB API,
原因是JDK9.0版本以前的版本java SE内默认包含JAXB这个包,但是JDK9.0中 Java SE内便不再包含这个包了,JAXB被划分为Java EE内的支持包了,因此导致这个异常。
方法一:
将JDK版本更换成8.0或7.0的
方法二:
若不想更换引入JAXB的jar包
javax.activation-1.2.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar
jaxb-api-2.3.0.jar
http://search.maven.org/remotecontent?filepath=javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar
jaxb-core-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-core/2.3.0/jaxb-core-2.3.0.jar
jaxb-impl-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-impl-2.3.0.jar
下载上面这些文件和复制他们到libs文件夹下,
添加他们导入到Build Path中
重新运行即可
以上两个方法都是我亲自测试可以用的,
并且有一点需要注意如果时连接的MySql8.0版本的需要注意连接数据库的URL的时区问题,不然也很有可能像我一样折腾大半天的
<!--连接数据库的URL代码-->
<property name="hibernate.connection.url" >jdbc:mysql:///test?serverTimezone=GMT%2B8</property>