下面是我的代码:package com.jd.oa.base;import java.util.List;public interface BaseDao<T> { /**
 * 返回所有对象集合
 * @return
 */
List<T> findAll();

/**
 * 根据id数据返回对象集合
 * @param id
 * @return
 */
List<T> findByIds(String[] ids); /**
 * 根据hql放回所有符合条件的对象集合
 * @param hql
 * @return
 */
List<T> findAll(String hql,List<Object> params);

/**
 * 根据分页信息返回所有的对象集合
 * @param page
 * @param pageSize
 * @return
 */
List<T> findByPage(int page,int pageSize);

/**
 * 根据分页信息返回所有的对象集合
 * @param hql 传入的hql语句
 * @param page
 * @param pageSize
 * @return
 */
List<T> findByPage(String hql,List<Object> params, int page, int pageSize);

/**
 * 根据id返回对象
 * @param id
 * @return
 */
T findById(String id);

/**
 * 更具用户的属性返回对象
 * @param proName
 * @param proValue
 * @return
 */
List<T> findByPropertiy(String proName,String proValue);


/**
 * 计算记录数量
 * @return
 */
long count();

/**
 * 根据hql语句,计算条件记录数量
 * @return
 */
long count(String hql,List<Object> params);

/**
 * 根据id删除对象
 * @param id
 */
void delete(String id);

/**
 * 数组删除
 * @param ids
 */
void deleteByIds(String[] ids);

/**
 * 更新数据库中的对象信息
 * @param entity
 */
void update(T entity);

/**
 * 向数据库中添加对象记录
 * @param entity
 */
void add(T entity);
}
package com.jd.oa.base;import java.lang.reflect.ParameterizedType;
import java.util.Collections;
import java.util.List;import javax.annotation.Resource;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;@SuppressWarnings("unchecked")
public class BaseDaoImpl<T> implements BaseDao<T>{ @Resource
protected SessionFactory sessionFactory;
private Class<T> clazz;  /**
 * 构造方法
 */
public BaseDaoImpl() {
// 同过反射得到T的真实类型
ParameterizedType pt = (ParameterizedType) this.getClass()
.getGenericSuperclass();
this.clazz = (Class) pt.getActualTypeArguments()[0];
} /**
 * 日返回所有对象集合
 * 
 * @return
 */ public List<T> findAll() {
return (List<T>) getSession().createQuery(
"FROM " + clazz.getSimpleName()).list();
}

/**
 * 根据hql放回所有符合条件的对象集合
 * @param hql 查询的hql语句
 * @return
 */
public List<T> findAll(String hql,List<Object> params){
Query q = getSession().createQuery(hql);
for(int i=0;i<params.size();i++){
q.setParameter(i, params.get(i));
}
return (List<T>)q.list();
}

/**
 * 根据id数据返回对象集合
 * 
 * @param id
 * @return
 */
public List<T> findByIds(String[] ids) {
if (ids == null || ids.length == 0) {
return Collections.EMPTY_LIST;// 返回一个不可操作的空集合
}
return (List<T>) getSession().createQuery(
"FROM " + clazz.getSimpleName() + " WHERE id IN (:ids)")
.setParameter("ids", ids).list();
} /**
 * 根据分页信息返回所有的对象集合
 * 
 * @param page
 * @param pageSize
 * @return
 */
public List<T> findByPage(int page, int pageSize) {
return (List<T>) getSession().createQuery(
"FROM " + clazz.getSimpleName()).setFirstResult(
(page - 1) * pageSize).setMaxResults(pageSize).list();
} /**
 * 根据分页信息返回所有的对象集合
 * 
 * @param hql
 *            传入的hql语句
 * @param page
 * @param pageSize
 * @return
 */
public List<T> findByPage(String hql,List<Object> params, int page, int pageSize) {
Query q = getSession().createQuery(hql);
for(int i=0;i<params.size();i++){
q.setParameter(i,params.get(i));
}
return (List<T>) q.setFirstResult((page - 1) * pageSize)
.setMaxResults(pageSize)
.list();
} /**
 * 根据id返回对象
 * 
 * @param id
 * @return
 */
public T findById(String id) {
return (T) getSession().get(clazz, id);
}

/**
 * 更具用户的属性返回对象
 * @param proName
 * @param proValue
 * @return
 */
public List<T> findByPropertiy(String proName,String proValue){
return (List<T>) getSession().createQuery(
"FROM " + clazz.getSimpleName() + " WHERE "+proName+" = :value")
.setParameter("value", proValue).list();
}
/**
 * 计算记录数量
 * @return
 */
public long count(){
return (Long)getSession()
.createQuery("FROM "+clazz.getSimpleName())
.uniqueResult();
}

/**
 * 根据hql语句,计算条件记录数量
 * @return
 */
public long count(String hql,List<Object> params){
Query q = getSession().createQuery(hql);
for(int i=0;i<params.size();i++){
q.setParameter(i,params.get(i));
}
return (Long) q.uniqueResult();
}

/**
 * 根据id删除对象
 * 
 * @param id
 */
public void delete(String id) {
getSession().delete(getSession().get(clazz, id));
} /**
 * 根据id数组删除对象
 * 
 * @param ids
 */
public void deleteByIds(String[] ids) {
for (String i : ids) {
delete(i);
}
} /**
 * 更新数据库中的对象信息
 * 
 * @param entity
 */
public void update(T entity) {
getSession().update(entity);
} /**
 * 向数据库中添加对象记录
 * 
 * @param entity
 */
public void add(T entity) {
getSession().save(entity);
} protected Session getSession() {
System.out.println(sessionFactory);
return sessionFactory.getCurrentSession();
}
}

解决方案 »

  1.   

    hibernate配置文件sessionfactory添加 <property name= "hibernate.current_session_context_class">thread</property>试试
      

  2.   


    <!-- 配置SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name= "hibernate.current_session_context_class" value="thread" />
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.format_sql">true</prop>
    </props>
    </property>
    <property name="annotatedClasses">
    <list>
    <value>com.jd.oa.entity.User</value>
    </list>
    </property>
    </bean>报错了,说没有这个配置项!!
      

  3.   


    <!-- 配置SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name= "hibernate.current_session_context_class" value="thread" />
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.format_sql">true</prop>
    </props>
    </property>
    <property name="annotatedClasses">
    <list>
    <value>com.jd.oa.entity.User</value>
    </list>
    </property>
    </bean>报错了,说没有这个配置项!!
    换成hibernate3试试 hibernate4估计设计不同了也可能
      

  4.   


    <!-- 配置SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name= "hibernate.current_session_context_class" value="thread" />
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.format_sql">true</prop>
    </props>
    </property>
    <property name="annotatedClasses">
    <list>
    <value>com.jd.oa.entity.User</value>
    </list>
    </property>
    </bean>报错了,说没有这个配置项!!
    我刚刚试了可以 我是这样配置的<session-factory>
    <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hibernate3.3.2?useUnicode=true&amp;characterEncoding=UTF-8</property>  
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
        <property name="hibernate.connection.username">root</property>  
        <property name="hibernate.connection.password">sa</property>  
        <property name="hibernate.connection.isolation">2</property>
    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name= "hibernate.current_session_context_class">thread</property>
    </session-factory>
    你那里应该配置到hibernateProperties里面吧 这个属于hibernate属性