First Hibernate
總結
此篇低原創性,非喜誤入。
因為某些原因,需要研究 Hibernate。所以參考 Hibernate Gossip: 第一個 Hibernate,做些實驗跟記錄。應該會記好長~好長的一陣子吧…
下載 Hibernate 3.6.10
- 解壓縮
- copy 出 hibernate3.jar
- copy 出 lib/required/*.jar
- copy 出 lib/jpa/*.jar ,話說這個是必要的,為什麼不是放在 required 裡啊?沒加進來出現下面的錯:
java.lang.NoClassDefFoundError: javax/persistence/EntityListeners
建立表格
- 注意 id 要 auto_increment,不然晚點會報無法寫入的錯:
Field 'id' doesn't have a default value
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [hbm.User] at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:63) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2346) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2853) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697) at hbm.HibernateDemo.main(HibernateDemo.java:17) Caused by: java.sql.SQLException: Field 'id' doesn't have a default value at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330) at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:93) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:56) ... 16 more
開發
- 新增 Java Project
- 把剛剛 copy 出了 jar 加進 Build Path
- 新增的兩個 xml 在 src/ 下。不然會報找不到這個錯:
/hibernate.cfg.xml not found
Exception in thread "main" java.lang.ExceptionInInitializerError at hbm.HibernateUtil.(HibernateUtil.java:13) at hbm.HibernateDemo.main(HibernateDemo.java:13) Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170) at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2176) at org.hibernate.cfg.Configuration.configure(Configuration.java:2157) at org.hibernate.cfg.Configuration.configure(Configuration.java:2137) at hbm.HibernateUtil. (HibernateUtil.java:10) ... 1 more
或者 User.hbm.xml not found
Exception in thread "main" java.lang.ExceptionInInitializerError at hbm.HibernateUtil.(HibernateUtil.java:13) at hbm.HibernateDemo.main(HibernateDemo.java:13) Caused by: org.hibernate.MappingNotFoundException: resource: User.hbm.xml not found at org.hibernate.cfg.Configuration.addResource(Configuration.java:799) at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2344) at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2310) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2290) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2243) at org.hibernate.cfg.Configuration.configure(Configuration.java:2158) at org.hibernate.cfg.Configuration.configure(Configuration.java:2137) at hbm.HibernateUtil. (HibernateUtil.java:10) ... 1 more