两年前初涉hibernate时这样用的
package com.util;import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import java.sql.Connection;
import org.apache.log4j.Logger;
import java.io.File;/**
*
* <p>Title: </p>
*
* <p> 用threandlocal 来使用hibernate的session 和transction: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author 孙钰佳
* @version 1.0
*/
public class HibernateUtil {
private static final Logger logger = Logger.getLogger(HibernateUtil.class);
private static final ThreadLocal sessionThread = new ThreadLocal();
private static final ThreadLocal transactionThread = new ThreadLocal();
private static SessionFactory sessionFactory = null; public static boolean sessionFactoryInit(File file) {
try {
Configuration config = new Configuration();
config.configure(file);
sessionFactory = config.buildSessionFactory();
} catch (HibernateException ex) {
logger.error("没能拿到sessionFactory: ",
new RuntimeException(
"Exception building SessionFactory: " +
ex.getMessage(), ex));
return false;
}
return true;
} /**
* 获取当前线程使用的Session
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws
HibernateException {
Session s = (Session) sessionThread.get();
if (s == null) {
s = sessionFactory.openSession();
sessionThread.set(s);
} else {
Connection conn = s.connection();
try {
if (conn == null || (conn.isClosed())) {
s.close();
s = sessionFactory.openSession();
sessionThread.set(s);
}
} catch (SQLException e) {
logger.error("取得conn失败:" + e.getMessage(), e);
}
}
return s;
} /**
* 启动或者加入当前Session的Transaction
*
* @return Transaction
* @throws HibernateException
*/
public static Transaction transaction() throws HibernateException {
Transaction transaction = (Transaction) transactionThread.get();
if (transaction == null) {
transaction = getSession().beginTransaction();
transactionThread.set(transaction);
}
return transaction;
} /**
* 提交当前Session的Transaction
*
* @throws HibernateException
*/
public static void commitTransaction() throws HibernateException {
Transaction transaction = (Transaction) transactionThread.get();
transactionThread.set(null);
if (transaction != null)
transaction.commit();
} /**
* 回滚当前Session的Transaction
*
* @throws HibernateException
*/
public static void rollbackTransaction() throws HibernateException {
Transaction tx = (Transaction) transactionThread.get();
transactionThread.set(null);
if (tx != null)
tx.rollback();
} /**
* 关闭当前线程使用的Session
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) sessionThread.get();
if (session != null) {
session.clear();
session.close();
sessionThread.set(null);
}
}
}
过滤器里面 try{
}略
finally {
try {
HibernateUtil.commitTransaction();
} catch (HibernateException e) {
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
}
package com.util;import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import java.sql.Connection;
import org.apache.log4j.Logger;
import java.io.File;/**
*
* <p>Title: </p>
*
* <p> 用threandlocal 来使用hibernate的session 和transction: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author 孙钰佳
* @version 1.0
*/
public class HibernateUtil {
private static final Logger logger = Logger.getLogger(HibernateUtil.class);
private static final ThreadLocal sessionThread = new ThreadLocal();
private static final ThreadLocal transactionThread = new ThreadLocal();
private static SessionFactory sessionFactory = null; public static boolean sessionFactoryInit(File file) {
try {
Configuration config = new Configuration();
config.configure(file);
sessionFactory = config.buildSessionFactory();
} catch (HibernateException ex) {
logger.error("没能拿到sessionFactory: ",
new RuntimeException(
"Exception building SessionFactory: " +
ex.getMessage(), ex));
return false;
}
return true;
} /**
* 获取当前线程使用的Session
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws
HibernateException {
Session s = (Session) sessionThread.get();
if (s == null) {
s = sessionFactory.openSession();
sessionThread.set(s);
} else {
Connection conn = s.connection();
try {
if (conn == null || (conn.isClosed())) {
s.close();
s = sessionFactory.openSession();
sessionThread.set(s);
}
} catch (SQLException e) {
logger.error("取得conn失败:" + e.getMessage(), e);
}
}
return s;
} /**
* 启动或者加入当前Session的Transaction
*
* @return Transaction
* @throws HibernateException
*/
public static Transaction transaction() throws HibernateException {
Transaction transaction = (Transaction) transactionThread.get();
if (transaction == null) {
transaction = getSession().beginTransaction();
transactionThread.set(transaction);
}
return transaction;
} /**
* 提交当前Session的Transaction
*
* @throws HibernateException
*/
public static void commitTransaction() throws HibernateException {
Transaction transaction = (Transaction) transactionThread.get();
transactionThread.set(null);
if (transaction != null)
transaction.commit();
} /**
* 回滚当前Session的Transaction
*
* @throws HibernateException
*/
public static void rollbackTransaction() throws HibernateException {
Transaction tx = (Transaction) transactionThread.get();
transactionThread.set(null);
if (tx != null)
tx.rollback();
} /**
* 关闭当前线程使用的Session
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) sessionThread.get();
if (session != null) {
session.clear();
session.close();
sessionThread.set(null);
}
}
}
过滤器里面 try{
}略
finally {
try {
HibernateUtil.commitTransaction();
} catch (HibernateException e) {
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货