在學習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>