在Hibernate中使用dao时注意任何save动作,均需把session关闭,否则容易出现查询与数据真实存在数据不一致。
Hibernate中反向生成的代码有时候满足不了时,可以直接进行封装基础的dao,现分享如下:
package rosten.entity.dao;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import rosten.boundary.UserManager;
import rosten.entity.BaseHibernateDAO;
public class BaseDAO extends BaseHibernateDAO {
private static Logger log= Logger.getLogger(UserManager.class);
public boolean insertObject(Object obj) {
Transaction tx = null;
Session session = getSession();
try {
tx = session.beginTransaction();
session.save(obj);
session.flush();
tx.commit();
} catch (Exception e) {
if (tx != null) {
try {
tx.rollback();
} catch (HibernateException ex) {
log.error("BaseDAO insertObject is error......");
return false;
}
}
} finally {
try {
session.close();
} catch (HibernateException ex) {
log.error("BaseDAO insertObject is error......");
return false;
}
}
return true;
}
public boolean deleteObject(Object obj) {
Transaction tx = null;
Session session = getSession();
try {
tx = session.beginTransaction();
session.delete(obj);
session.flush();
tx.commit();
} catch (Exception e) {
if (tx != null) {
try {
tx.rollback();
} catch (HibernateException ex) {
log.error("BaseDAO deleteObject is error......");
return false;
}
}
} finally {
try {
session.close();
} catch (HibernateException ex) {
log.error("BaseDAO deleteObject is error......");
return false;
}
}
return true;
}
public boolean updateObject(Object obj) {
Transaction tx = null;
Session session = getSession();
try {
tx = session.beginTransaction();
session.saveOrUpdate(obj);
session.flush();
tx.commit();
} catch (Exception e) {
if (tx != null) {
try {
tx.rollback();
} catch (HibernateException ex) {
log.error("BaseDAO updateObject is error......");
return false;
}
}
} finally {
try {
session.close();
} catch (HibernateException ex) {
log.error("BaseDAO updateObject is error......");
return false;
}
}
return true;
}
}