今天偶用hibernate連MySql時發(fā)現(xiàn)一個問題:
數(shù)據(jù)無法提交到對應(yīng)的表中,且不報(bào)錯,使我有種每次重啟tomcat就重建表的錯覺。
從而把過錯歸咎于
<property name="hbm2ddl.auto">create</property>
經(jīng)過測試發(fā)現(xiàn),我的方向錯了。原本,我的dao是這樣寫的:(以add為例)
/**
* 向數(shù)據(jù)庫中添加數(shù)據(jù)
*
* @param t
*/
public void add(T t) {
logger.info("向數(shù)據(jù)庫添加" + t);
Session session = HibernateUtil.getSession();
session.save(t);
session.flush();
HibernateUtil.closeSession(session);
}
* 向數(shù)據(jù)庫中添加數(shù)據(jù)
*
* @param t
*/
public void add(T t) {
logger.info("向數(shù)據(jù)庫添加" + t);
Session session = HibernateUtil.getSession();
session.save(t);
session.flush();
HibernateUtil.closeSession(session);
}
后來和老師朋友們交流才知道,原來MySql是不能自動提交的,所以我的數(shù)據(jù)只是插入到緩存里,沒到數(shù)據(jù)庫里。
現(xiàn)將此方法改為如下形式便好了:
/**
* 向數(shù)據(jù)庫中添加數(shù)據(jù)
*
* @param t
*/
public void add(T t) {
logger.info("向數(shù)據(jù)庫添加" + t);
Session session = HibernateUtil.getSession();
Transaction ts=session.beginTransaction();
session.save(t);
session.flush();
ts.commit();
HibernateUtil.closeSession(session);
}
* 向數(shù)據(jù)庫中添加數(shù)據(jù)
*
* @param t
*/
public void add(T t) {
logger.info("向數(shù)據(jù)庫添加" + t);
Session session = HibernateUtil.getSession();
Transaction ts=session.beginTransaction();
session.save(t);
session.flush();
ts.commit();
HibernateUtil.closeSession(session);
}