1. 程式人生 > >Hibernate 入門錯誤解決辦法。

Hibernate 入門錯誤解決辦法。

 log4j:WARN No appenders could be found for logger (org.hibernate.type.BasicTypeRegistry).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
 at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:108)
 at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:133)
 at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80)
 at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:322)
 at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:485)
 at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
 at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
 at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:286)
 at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
 at junit.test.testadd(test.java:14)
 at junit.test.main(test.java:25)
Caused by: java.lang.reflect.InvocationTargetException
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
 at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:105)
 ... 10 more
Caused by: java.lang.NoClassDefFoundError: javassist/util/proxy/MethodFilter
 at org.hibernate.bytecode.javassist.BytecodeProviderImpl.getProxyFactoryFactory(BytecodeProviderImpl.java:49)
 at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactoryInternal(PojoEntityTuplizer.java:205)
 at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:183)
 at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:167)
 at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:77)
 ... 15 more
Caused by: java.lang.ClassNotFoundException: javassist.util.proxy.MethodFilter
 at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
 ... 20 more

這個錯誤的解決辦法是 新增 hibernate required 包javassist-3.12.0.GA.jar ,建議把hibernate required 所有包都匯入到專案中

第二個問題 是不顯示 sql 語句

在hibernate.cfg.xml 裡面加上

<property name="hibernate.show_sql">true</property>  就能顯示 sql  ,這能 幫助你學習hibernate

第三個問題

Exception in thread "main" org.hibernate.TypeMismatchException: Provided id of the wrong type for class model.User. Expected: class java.lang.Integer, got class java.lang.String
 at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:135)
 at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1090)
 at org.hibernate.impl.SessionImpl.get(SessionImpl.java:1005)
 at org.hibernate.impl.SessionImpl.get(SessionImpl.java:998)
 at junit.test.testadd(test.java:20)
 at junit.test.main(test.java:25)

問題解決辦法是 檢查下

User user =(User)session.get(User.class, "1");

應該改成

User user =(User)session.get(User.class, 1 ); 因為 主鍵 是整形的

 注意 這裡 有個 type 型別  使用get 方法 ,要和id 型別一致。

<id name="myid" column="id" type="java.lang.Integer" >
   <generator class="native"/>
  </id>

初級階段錯誤告一段落 ,繼續前行