Hibernate+struts2开发的项目。
解决事务边界和延迟加载的问题,采用了Open Session In view模式。过滤器的代码如下:
import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;import org.hibernate.Session;
import org.hibernate.Transaction;public class SessionFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
Session session = null;
Transaction transaction = null;
try {
session = HibernateUtil.getThreadLocalSession();
transaction = session.beginTransaction();
chain.doFilter(request, response);
transaction.commit();
} catch (Exception e) {
// TODO: handle exception
if(transaction != null)
transaction.rollback();
throw new RuntimeException(e.getMessage(), e);
}
finally{
HibernateUtil.colseSession();
} } public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub }}当我在项目中使用
Session session = HibernateUtil.getThreadLocalSession();
session.save(entity);
此时显示了插入的select语句,但数据库木有同步,我也知道这是事务没有提交造成的。也就是这个过滤器有问题,当我不解这个过滤器问题出在哪儿。求高人指点。
解决事务边界和延迟加载的问题,采用了Open Session In view模式。过滤器的代码如下:
import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;import org.hibernate.Session;
import org.hibernate.Transaction;public class SessionFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
Session session = null;
Transaction transaction = null;
try {
session = HibernateUtil.getThreadLocalSession();
transaction = session.beginTransaction();
chain.doFilter(request, response);
transaction.commit();
} catch (Exception e) {
// TODO: handle exception
if(transaction != null)
transaction.rollback();
throw new RuntimeException(e.getMessage(), e);
}
finally{
HibernateUtil.colseSession();
} } public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub }}当我在项目中使用
Session session = HibernateUtil.getThreadLocalSession();
session.save(entity);
此时显示了插入的select语句,但数据库木有同步,我也知道这是事务没有提交造成的。也就是这个过滤器有问题,当我不解这个过滤器问题出在哪儿。求高人指点。
解决方案 »
- 关于建设监控系统的设想
- 新手求助
- 关于dwr的调用类
- 请高手帮忙解决!!!!!!!!!!!!!!!!!!
- hibernate在保存某个实体域对象到DB时,发现对象的某个字段为null,可是该字段在hibernate的配置文件中已经配置了not-null="true",请问
- 对于.net的System.Web.HttpRuntime.Cache我们JAVA的对策是什么?我怎么没看到过缓存,难道用APACHE对
- JAVA爱好者及高手:QQ群:691713,现在还差数人,加满为止!
- 请各位大侠帮我解释一下,谢谢了
- 请问:MiddleGen就是干什么用的
- struts高手进,在线等,解决马上给50分 谢!
- 刚入职的Java程序员,怎样了解公司业务,看公司源码
- hibernate使用时出错,各位帮忙看看
Session要是在filter里面已经存在了,你在代码里又手动取得如果是OpenSession会取得另一个Sesion,另你的关闭Session能不能改成closeSession(Session session),来显式地给指定你要关闭的是哪个?
public static Session getThreadLocalSession(){
Session session = localSession.get();
if(session == null){
session = getSession();
localSession.set(session);
}
return session;
}
此时在代码里取得的session肯定是同一个session。因为session绑定到ThreadLocal类中了。那么至于关闭也无须指定关闭那个session了。