多表声明式事务配置 把你的dao的代码贴上来。。dao有没继承 HibernateDaoSupport ? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BaseDAO的代码:/* * @(#)BaseDAO.java * * Copyright (c) 2008 onest Inc. * All Rights Reserved. * * 作用:基类DAO * 注意事项: * Create by Jun 4, 2008 v 1.0 * LastUpdate by Jun 4, 2008 v 1.0 */package com.onest.treatsms.dao.Impl;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.sql.PreparedStatement;import java.util.Map;import java.util.Iterator;import java.util.List;import java.util.Map.Entry;import java.io.Serializable;import org.apache.log4j.Logger;import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.criterion.CriteriaSpecification;import org.hibernate.criterion.Example;import org.hibernate.criterion.MatchMode;import org.hibernate.criterion.Order;import org.hibernate.criterion.Projections;import org.hibernate.criterion.Restrictions;import com.onest.treatsms.dao.IBaseDAO;import com.onest.treatsms.exception.SystemException;import com.onest.treatsms.utils.OrderEnum;import com.onest.treatsms.utils.PageSupport;public abstract class BaseDAO<T, ID extends Serializable> implements IBaseDAO<T, ID> { private SessionFactory sessionFactory; private Class poClass; private static final Logger log = Logger.getLogger(BaseDAO.class); private static final int WHERE_EQ = 0; // 相等 private static final int WHERE_LIKE_ALL = 1; // 全LIKE private static final int WHERE_IN = 2; // IN查询 private static final int NOT_NULL = 3; // 不为空 public BaseDAO() { Type type = this.getClass().getGenericSuperclass(); if (type instanceof ParameterizedType) { poClass = (Class) ((ParameterizedType) type) .getActualTypeArguments()[0]; } else { throw new RuntimeException(this.getClass().getName() + "没有指定继承的po类型"); } } public Class getPoClass() { return poClass; } public void setPoClass(Class poClass) { this.poClass = poClass; } public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public Session getSession() { //return sessionFactory.getCurrentSession(); return sessionFactory.openSession(); } /* private static final ThreadLocal<Session> sessionthreadLocal = new ThreadLocal<Session>(); private static final ThreadLocal<Transaction> tranThreadLocal = new ThreadLocal<Transaction>(); private static final int TRAN_TIME_OUT = 20; public Session getSession() { Session session = sessionthreadLocal.get(); if (session == null || !session.isOpen()) { session = sessionFactory.openSession(); sessionthreadLocal.set(session); log.debug("open session"); } return session; } */ // ===================================CRUD================== public boolean insert(T instance) throws Exception { try { Session sess = getSession(); sess.save(instance); return true; } catch (Exception e) { e.printStackTrace(); throw new SystemException("数据库操作失败!" + e.getMessage()); } /* PreparedStatement st = getSession().connection().prepareStatement("insert into SMS_CENTER(ID," + "USER_NAME) values(21, '111')"); st.execute(); st = getSession().connection().prepareStatement("insert into SMS_CENTER(ID," + "USER_NAME) values(10, '111')");st.execute(); */ } public boolean update(T instance) throws Exception { try { Session sess = getSession(); sess.update(instance); return true; } catch (Exception e) { e.printStackTrace(); throw new SystemException("数据库操作失败!"); } } public T findById(ID id) { try { return (T) getSession().get(poClass, id); } catch (Exception e) { log.error(e.getMessage()); throw new SystemException("数据库操作异常"); } } } 我的DAO没继承HibernateDaoSupport ,而是自己写了个BASEDAO,上面只是部分代码,因为论坛提示内容过长,我只截取其中一小部分。 你必须判断是不是一个新的session,如果该类之前创建过session,你又没做判断,他会认为你会用老session继续操作你可以去看下Spring中HibernateTemplet这个类的源代码,里面有判断session的方法正如1楼所说,你可以继承HibernateDaoSupport这个类,他其中用到的getHibernateTemplet()方法其实就是返回个HibernateTemplet实例,但要注意继承HibernateDaoSupport后就不要在类里写sessionFactory的set方法了,因为HibernateDaoSupport已经封装过了,继承过来就行了,但要Spring配置文件里写对属性名 头痛的异常 jeecms 中的问题 js 控制select的一个小问题。 java解析xml时出现 java.net.MalformedURLException: unknown protocol:异常 高手进 关于:org.apache.struts.action 包的问题 <logic:iterate>循环遍历 radio赋值 一台PC机上怎样才能跑二个TOMCAT服务器呢? 有没有Struts学习的资料! 部署CMP时报错,急 唯品会购物袋问题 关于hibernate的错误。。 java的html解析分析器,那个是最好的
* @(#)BaseDAO.java
*
* Copyright (c) 2008 onest Inc.
* All Rights Reserved.
*
* 作用:基类DAO
* 注意事项:
* Create by Jun 4, 2008 v 1.0
* LastUpdate by Jun 4, 2008 v 1.0
*/package com.onest.treatsms.dao.Impl;import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.PreparedStatement;
import java.util.Map;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.io.Serializable;import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import com.onest.treatsms.dao.IBaseDAO;
import com.onest.treatsms.exception.SystemException;
import com.onest.treatsms.utils.OrderEnum;
import com.onest.treatsms.utils.PageSupport;
public abstract class BaseDAO<T, ID extends Serializable> implements
IBaseDAO<T, ID> { private SessionFactory sessionFactory;
private Class poClass;
private static final Logger log = Logger.getLogger(BaseDAO.class);
private static final int WHERE_EQ = 0; // 相等
private static final int WHERE_LIKE_ALL = 1; // 全LIKE
private static final int WHERE_IN = 2; // IN查询
private static final int NOT_NULL = 3; // 不为空
public BaseDAO() {
Type type = this.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
poClass = (Class) ((ParameterizedType) type)
.getActualTypeArguments()[0];
} else {
throw new RuntimeException(this.getClass().getName()
+ "没有指定继承的po类型");
}
} public Class getPoClass() {
return poClass;
} public void setPoClass(Class poClass) {
this.poClass = poClass;
} public SessionFactory getSessionFactory() {
return sessionFactory;
} public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getSession() {
//return sessionFactory.getCurrentSession();
return sessionFactory.openSession();
}
/*
private static final ThreadLocal<Session> sessionthreadLocal = new ThreadLocal<Session>();
private static final ThreadLocal<Transaction> tranThreadLocal = new ThreadLocal<Transaction>();
private static final int TRAN_TIME_OUT = 20;
public Session getSession() {
Session session = sessionthreadLocal.get();
if (session == null || !session.isOpen()) {
session = sessionFactory.openSession();
sessionthreadLocal.set(session);
log.debug("open session");
}
return session;
}
*/
// ===================================CRUD==================
public boolean insert(T instance) throws Exception {
try {
Session sess = getSession();
sess.save(instance);
return true;
} catch (Exception e) {
e.printStackTrace();
throw new SystemException("数据库操作失败!" + e.getMessage());
}
/*
PreparedStatement st = getSession().connection().prepareStatement("insert into SMS_CENTER(ID," +
"USER_NAME) values(21, '111')");
st.execute();
st = getSession().connection().prepareStatement("insert into SMS_CENTER(ID," +
"USER_NAME) values(10, '111')");
st.execute();
*/
} public boolean update(T instance) throws Exception {
try {
Session sess = getSession();
sess.update(instance);
return true;
} catch (Exception e) {
e.printStackTrace();
throw new SystemException("数据库操作失败!");
}
} public T findById(ID id) {
try {
return (T) getSession().get(poClass, id);
} catch (Exception e) {
log.error(e.getMessage());
throw new SystemException("数据库操作异常");
}
}
}
论坛提示内容过长,我只截取其中一小部分。
HibernateDaoSupport已经封装过了,继承过来就行了,但要Spring配置文件里写对属性名