剛整明白一個,呵呵,笨
hibernate save的時候必須啟用事務,也就是必須
beginTransaction();
然后
commit();
要不然不會insert
看孫衛琴.精通Hibernate:Java對象持久化技術詳解上講
調用save方法后,hibernate并不會立即insert,而是保存在緩存里,等清理緩存時再insert
什么時候清理緩存呢?
1、事務commit();
2、find方法(hibernate3被廢)
3、顯示調用flush();
而為什么不用事務,只是在save();后直接顯示調用flush();還是沒有insert呢?
參考csdn的一個帖子http://topic.csdn.net/u/20080603/19/d6918606-3a62-43a4-b63d-cd292242bbc6.html
因為數據源的問題
真正的原因是數據源conn默認的提交方式,hibernate不管這件事,大部分開源數據源都是默認false的
我試了hibernate的默認連接池,和tomcat中配的連接池用使用事務都沒有insert。
下面這段代碼能夠insert可以說明一些問題
public static void main(String[] args) throws Exception {
SessionFactory sf=HibernateSessionFactory.getSessionFactory();
Session session=sf.openSession();
System.out.println(session.connection().getAutoCommit());
session.connection().setAutoCommit(true);
User u=new User();
u.setName("aaa");
session.save(u);
}
}
而commit和flush的區別就是commit先flush再提交,而flush沒有提交
而在close的時候,孫衛琴.精通Hibernate:Java對象持久化技術詳解上講的是hibernate會清空緩存,一個清理,一個清空,一字之差,呵呵