今天在學習Hibernate緩存機制時一直報錯:
Exception in thread "main" org.hibernate.TransactionException: commit failed
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:187)
at com.mao.secondCache.NewManager.secondCache(NewManager.java:28)
at com.mao.secondCache.NewManager.main(NewManager.java:13)
Caused by: org.hibernate.TransactionException: unable to commit against JDBC connection
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:116)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:180)
... 2 more
Caused by: java.sql.SQLException: You can't operate on a closed Connection!!!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:77)
at com.mchange.v2.c3p0.impl.NewProxyConnection.commit(NewProxyConnection.java:1290)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:112)
... 3 more
Caused by: java.lang.NullPointerException
at com.mchange.v2.c3p0.impl.NewProxyConnection.commit(NewProxyConnection.java:1284)
... 4 more
又是事務提交失敗,又是不能關閉這個連接,去網上查了好多沒解決,最後發現:
Session session=HibernateUtil.currentSession();
//開啓事務
Transaction tx=session.beginTransaction();
//獲取數據
List list=session.createQuery("from News news")
.list();
//通過id查找數據
News news =(News) session.load(News.class, 2);
System.out.println(news.getTitle()+"\t"+news.getContent());
//關閉Session
session.close();
tx.commit();
我竟然是先關閉的Session後提交的事務!session都關閉了還提交個毛啊。解決方案:
先提交事務,再關閉Session。