`
silentJesse
  • 浏览: 107821 次
  • 性别: Icon_minigender_1
  • 来自: 福建厦门
社区版块
存档分类
最新评论

hibernate+spring 的泛型dao接口和和实现类..以及配置

阅读更多
1.泛型dao接口
package hibernate.basedao;
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;

import co.th.tools.PageData;


/**
 * 通用Dao父类实现的接?口,只提供常见的一些功能,其它特殊的功能,可以在子接口中定义。
 * 事务也在需要的时候加到实现类中
 *
 * @param <T> 实体类型
 */
public interface GenericDao<T> {
	
	
	public List<T> findTbyHql(String hql);
	
	/**
	 * by this method you can get all information about T
	 * @return
	 */
	public List<T> findAll();
	
	/**
	 * 和数据库同步
	 * @param entityClass 实体类
	 * @return
	 */
	public void fulsh();
	/**
	 * 获取记录总数
	 * @param entityClass 实体类
	 * @return
	 */
	public long getCount(final String wherejpql, 
              final Object[] queryParams);
	/**
	 * 清除一级缓存的数据
	 */
	public void clear();
	/**
	 * 保存实体
	 * @param entity 实体id
	 */
	public void save(Object entity);
	/**
	 * 更新实体
	 * @param entity 实体id
	 */
	public void update(Object entity);
	/**
	 * 删除实体
	 * @param entityClass 实体类
	 * @param entityids 实体id数组
	 */
	public void delete(Serializable ... entityids);
	/**
	 * 获取实体
	 * @param <T>
	 * @param entityClass 实体类
	 * @param entityId 实体id
	 * @return
	 */
	public T find(Serializable entityId)  ;
	/**
	 * 获取实体
	 * @param <T>
	 * @param entityClass 实体类
	 * @param entityId 实体id
	 * @return
	 */
	public T get(Serializable entityId);
	/**
	 * 获取分页数据
	 * @param <T>
	 * @param entityClass 实体类
	 * @param firstindex 开始索引
	 * @param maxresult 需要获取的记录数
	 * @return
	 */
	public PageData<T> getScrollData(int firstindex, int     
               maxresult, String wherejpql, Object[]
               queryParams,LinkedHashMap<String, String> orderby);
	
	public PageData<T> getScrollData(int firstindex, 
                int maxresult, String wherejpql, 
                 Object[]  queryParams);
	
	public PageData<T> getScrollData(int firstindex,
            int maxresult, LinkedHashMap<String, String> orderby);
	
	public PageData<T> getScrollData(int firstindex, 
              int maxresult);
	
	public PageData<T> getScrollData();
	
	public PageData<T> getScrollDataByHql(
               final int firstindex, 
               final int maxresult,
               final String hql_search, 
               final String hql_totalRecords);
	
	public int executeDML(final String hql);
	public int executeDML(final String sethql, 
                 Object[] values);
	public List<T> limitFindByHql(final int firstindex, 
                  final int maxresult,
		final String wherejpql,
                  final Object[] queryParams,
		final LinkedHashMap<String, String> orderby);
}






2.泛型dao接口实现类
package hibernate.basedao;



import java.io.Serializable;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.List;



import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.th.tools.GenericsUtils;
import co.th.tools.PageData;
@SuppressWarnings("unchecked")
public abstract class GenericDaoImpl<T> extends HibernateDaoSupport implements GenericDao<T>{
 
	protected Log logger = LogFactory.getLog(GenericDaoImpl.class);
	
	protected Class<T> entityClass = GenericsUtils.getSuperClassGenricType(this.getClass());
	
	public void clear() {
		getHibernateTemplate().clear(); 
	}
	
	public void fulsh(){
		getHibernateTemplate().flush();
	}

	public void delete(Serializable... entityids) {
		for (int i = 0; i < entityids.length; i++) {
			T t = get(entityids[i]);
			 
			if(t != null){
				getHibernateTemplate().delete(t);
			} 
		}
	}

	public T find(Serializable entityId) {
		if(entityId  == null){
			throw new RuntimeException(this.entityClass.getName()+ ":id is empty or null");
		}
		T t = null; 
		t = get(entityId);
		return  t;
	}
	
	public T get(Serializable entityId){
		if(entityId  == null){
			throw new RuntimeException(this.entityClass.getName()+ ":id is empty or null");
		}
		return (T) getHibernateTemplate().get(this.entityClass, entityId);
	}

	public long getCount(final String wherejpql, final Object[] queryParams) {
		final String hql = "select count(o) from "+ 
		getEntityName(this.entityClass)+ " o " + (wherejpql==null || "".equals(wherejpql.trim())? "": "where 1=1 "+ wherejpql);
	  return (Long)getHibernateTemplate().execute(new HibernateCallback(){
		  public Object doInHibernate(Session session)
			throws HibernateException, SQLException { 
		Query query = session.createQuery(hql);
		setQueryParams(query, queryParams);
		return query.uniqueResult();
	}
	  });
	}


	public void save(Object entity) {
		getHibernateTemplate().save(entity);
	}

	public void update(Object entity) {
		getHibernateTemplate().update(entity);
	}

	@SuppressWarnings("unchecked")
	public PageData<T> getScrollData(final int firstindex, final int maxresult,
		final String wherejpql, final Object[] queryParams,
		final LinkedHashMap<String, String> orderby) {
		final PageData qr = new PageData<T>();
		final String entityname = getEntityName(this.entityClass);
		return (PageData<T>)getHibernateTemplate().execute(new HibernateCallback(){
			 public Object doInHibernate(Session session)
				throws HibernateException, SQLException {
				 Query query = session.createQuery("select o from "+ entityname+ " o "+(wherejpql==null || "".equals(wherejpql.trim())? "": "where 1=1 "+ wherejpql)+ buildOrderby(orderby));
					setQueryParams(query, queryParams);
					if(firstindex!=-1 && maxresult!=-1) query.setFirstResult(firstindex).setMaxResults(maxresult);
					qr.setResultlist(query.list());
					query = session.createQuery("select count(o) from "+ entityname+ " o "+(wherejpql==null || "".equals(wherejpql.trim())? "": "where 1=1 "+ wherejpql));
					setQueryParams(query, queryParams);
					qr.setTotalRecords((Long)query.uniqueResult());
					return qr;
			 }
		});
	}
	
	
	
	@SuppressWarnings("unchecked")
	public PageData<T> getScrollDataByHql(final int firstindex, final int maxresult,final String hql_search, final String hql_totalRecords) {
		final PageData qr = new PageData<T>();
		//final String entityname = getEntityName(this.entityClass);
		return (PageData<T>)getHibernateTemplate().execute(new HibernateCallback(){
			 public Object doInHibernate(Session session)
				throws HibernateException, SQLException {
				 Query query = null;
				 query = session.createQuery(hql_search);
					if(firstindex!=-1 && maxresult!=-1) query.setFirstResult(firstindex).setMaxResults(maxresult);
					qr.setResultlist(query.list()); 
					query = session.createQuery(hql_totalRecords);
					qr.setTotalRecords((Long)query.uniqueResult()); 
					return qr;
			 }
		});
	}
	
	
	
	
	
	/**
	 * 设置查询条件的参数
	 * @param query
	 * @param queryParams
	 */
	protected static void setQueryParams(Query query, Object[] queryParams){
		if(queryParams!=null && queryParams.length>0){
			for(int i=0; i<queryParams.length; i++){
				query.setParameter(i, queryParams[i]);
			}
		}
	}
	/**
	 * 组装order by语句
	 * @param orderby
	 * @return
	 */
	protected static String buildOrderby(LinkedHashMap<String, String> orderby){
		StringBuffer orderbyql = new StringBuffer("");
		if(orderby!=null && orderby.size()>0){
			orderbyql.append(" order by ");
			for(String key : orderby.keySet()){
				orderbyql.append("o.").append(key).append(" ").append(orderby.get(key)).append(",");
			}
			orderbyql.deleteCharAt(orderbyql.length()-1);
		}
		return orderbyql.toString();
	}

	public PageData<T> getScrollData(int firstindex, int maxresult,
			String wherejpql, Object[] queryParams) {
		
		return getScrollData(firstindex, maxresult, wherejpql, queryParams, null);
	}

	public PageData<T> getScrollData(int firstindex, int maxresult,
			LinkedHashMap<String, String> orderby) {
		return getScrollData(firstindex, maxresult, null, null, orderby);
	}

	public PageData<T> getScrollData(int firstindex, int maxresult) {
		
		return getScrollData(firstindex, maxresult, null, null, null);
	}

	public PageData<T> getScrollData() {
		return getScrollData(-1, -1);
	}
	
	/**
	 * 获取实体的名称
	 * @param <E>
	 * @param clazz 实体类
	 * @return
	 */
	protected static <E> String getEntityName(Class<E> clazz){
		String entityname = clazz.getSimpleName();
		return entityname;
	}
	
	public List<T> findAll(){
		List<T> list = getHibernateTemplate().loadAll(entityClass);
		return list;
	}
	public List<T> findTbyHql(String hql){
		List<T> list = getHibernateTemplate().find(hql);
		return list;
	}
	
	public int executeDML(final String hql){
		Integer result = 0; 
		result = getHibernateTemplate().bulkUpdate(hql);
		return result;
	}
	
	public int executeDML(final String sethql, Object[] values){
		Integer result = 0;
		final String entityname = getEntityName(this.entityClass);
		String hql = "update " + entityname + " o " + sethql ;
		result = getHibernateTemplate().bulkUpdate(hql, values);
		return result;
	}
	
	
	@SuppressWarnings("unchecked")
	public List<T> limitFindByHql(final int firstindex, final int maxresult,
		final String wherejpql, final Object[] queryParams,
		final LinkedHashMap<String, String> orderby) {
		final String entityname = getEntityName(this.entityClass);
		return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){
			 public Object doInHibernate(Session session)
				throws HibernateException, SQLException {
				 Query query = session.createQuery("select o from "+ entityname+ " o "+(wherejpql==null || "".equals(wherejpql.trim())? "": "where 1=1 "+ wherejpql)+ buildOrderby(orderby));
					setQueryParams(query, queryParams);
					if(firstindex!=-1 && maxresult!=-1) 
						query.setFirstResult(firstindex).setMaxResults(maxresult); 
					return query.list();
			 }
		});
	}
}




3.PageData源代码
public class PageData<T> {
	
	private List<T> resultlist;
	private long TotalRecords;
	
	public List<T> getResultlist() {
		return resultlist;
	}
	public void setResultlist(List<T> resultlist) {
		this.resultlist = resultlist;
	}
	public long getTotalRecords() {
		return TotalRecords;
	}
	public void setTotalRecords(long totalRecords) {
		TotalRecords = totalRecords;
	}
	
}




4.GenericsUtils 源代码
public class GenericsUtils {
	/**  
     * 通过反射,获得指定类的父类的泛型参数的实际类型. 如BuyerServiceBean extends DaoSupport<Buyer>  
     *  
     * @param clazz clazz 需要反射的类,该类必须继承范型父类
     * @param index 泛型参数所在索引,从0开始.  
     * @return 范型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code>
     */  
    @SuppressWarnings("unchecked")
	public static Class getSuperClassGenricType(Class clazz, int index) {    
        Type genType = clazz.getGenericSuperclass();//得到泛型父类  
        //如果没有实现ParameterizedType接口,即不支持泛型,直接返回Object.class   
        if (!(genType instanceof ParameterizedType)) {
            return Object.class;   
        }  
        //返回表示此类型实际类型参数的Type对象的数组,数组里放的都是对应类型的Class, 如BuyerServiceBean extends DaoSupport<Buyer,Contact>就返回Buyer和Contact类型   
        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();                   
        if (index >= params.length || index < 0) { 
        	 throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数"));
        }      
        if (!(params[index] instanceof Class)) {
            return Object.class;   
        }   
        return (Class) params[index];
    }
	/**  
     * 通过反射,获得指定类的父类的第一个泛型参数的实际类型. 如BuyerServiceBean extends DaoSupport<Buyer>  
     *  
     * @param clazz clazz 需要反射的类,该类必须继承泛型父类
     * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code>
     */  
    @SuppressWarnings("unchecked")
	public static Class getSuperClassGenricType(Class clazz) {
    	return getSuperClassGenricType(clazz,0);
    }
	/**  
     * 通过反射,获得方法返回值泛型参数的实际类型. 如: public Map<String, Buyer> getNames(){}
     *  
     * @param Method method 方法
     * @param int index 泛型参数所在索引,从0开始.
     * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code>
     */ 
    @SuppressWarnings("unchecked")
	public static Class getMethodGenericReturnType(Method method, int index) {
    	Type returnType = method.getGenericReturnType();
    	if(returnType instanceof ParameterizedType){
    	    ParameterizedType type = (ParameterizedType) returnType;
    	    Type[] typeArguments = type.getActualTypeArguments();
            if (index >= typeArguments.length || index < 0) { 
            	 throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数"));
            } 
    	    return (Class)typeArguments[index];
    	}
    	return Object.class;
    }
	/**  
     * 通过反射,获得方法返回值第一个泛型参数的实际类型. 如: public Map<String, Buyer> getNames(){}
     *  
     * @param Method method 方法
     * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code>
     */ 
    @SuppressWarnings("unchecked")
	public static Class getMethodGenericReturnType(Method method) {
    	return getMethodGenericReturnType(method, 0);
    }
    
	/**  
     * 通过反射,获得方法输入参数第index个输入参数的所有泛型参数的实际类型. 如: public void add(Map<String, Buyer> maps, List<String> names){}
     *  
     * @param Method method 方法
     * @param int index 第几个输入参数
     * @return 输入参数的泛型参数的实际类型集合, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回空集合
     */ 
    @SuppressWarnings("unchecked")
	public static List<Class> getMethodGenericParameterTypes(Method method, int index) {
    	List<Class> results = new ArrayList<Class>();
    	Type[] genericParameterTypes = method.getGenericParameterTypes();
    	if (index >= genericParameterTypes.length ||index < 0) {
             throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数"));
        } 
    	Type genericParameterType = genericParameterTypes[index];
    	if(genericParameterType instanceof ParameterizedType){
    	     ParameterizedType aType = (ParameterizedType) genericParameterType;
    	     Type[] parameterArgTypes = aType.getActualTypeArguments();
    	     for(Type parameterArgType : parameterArgTypes){
    	         Class parameterArgClass = (Class) parameterArgType;
    	         results.add(parameterArgClass);
    	     }
    	     return results;
    	}
    	return results;
    }
	/**  
     * 通过反射,获得方法输入参数第一个输入参数的所有泛型参数的实际类型. 如: public void add(Map<String, Buyer> maps, List<String> names){}
     *  
     * @param Method method 方法
     * @return 输入参数的泛型参数的实际类型集合, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回空集合
     */ 
    @SuppressWarnings("unchecked")
	public static List<Class> getMethodGenericParameterTypes(Method method) {
    	return getMethodGenericParameterTypes(method, 0);
    }
	/**  
     * 通过反射,获得Field泛型参数的实际类型. 如: public Map<String, Buyer> names;
     *  
     * @param Field field 字段
     * @param int index 泛型参数所在索引,从0开始.
     * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code>
     */ 
    @SuppressWarnings("unchecked")
	public static Class getFieldGenericType(Field field, int index) {
    	Type genericFieldType = field.getGenericType();
    	
    	if(genericFieldType instanceof ParameterizedType){
    	    ParameterizedType aType = (ParameterizedType) genericFieldType;
    	    Type[] fieldArgTypes = aType.getActualTypeArguments();
    	    if (index >= fieldArgTypes.length || index < 0) { 
    	    	throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数"));
            } 
    	    return (Class)fieldArgTypes[index];
    	}
    	return Object.class;
    }
	/**  
     * 通过反射,获得Field泛型参数的实际类型. 如: public Map<String, Buyer> names;
     *  
     * @param Field field 字段
     * @param int index 泛型参数所在索引,从0开始.
     * @return 泛型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code>
     */ 
    @SuppressWarnings("unchecked")
	public static Class getFieldGenericType(Field field) {
    	return getFieldGenericType(field, 0);
    }}



5.用于分页的PageIndex和PageView
public class PageIndex {
	
	private long startindex;
	private long endindex;
	
	public PageIndex(long startindex, long endindex) {
		this.startindex = startindex;
		this.endindex = endindex;
	}
	public long getStartindex() {
		return startindex;
	}
	public void setStartindex(long startindex) {
		this.startindex = startindex;
	}
	public long getEndindex() {
		return endindex;
	}
	public void setEndindex(long endindex) {
		this.endindex = endindex;
	}
	
}


public class PageView<T> {
	/** 分页数据 **/
	private List<T> records;
	/** 页码开始索引和结束索引 **/
	private PageIndex pageindex;
	/** 总页数 **/
	private long totalpage = 1;
	/** 每页显示记录数 **/
	private int maxresult = 12;
	/** 当前页 **/
	private int currentpage = 1;
	/** 总记录数 **/
	private long totalrecord;
	/** 尾页 **/
	private int lastpage;
	/** 页码数量 **/
	private int pagecode = 15;
	/** 要获取记录的开始索引 **/
	public int getFirstResult() {
		return (this.currentpage-1)*this.maxresult;
	}
	/**取得首页**/
	public int getTopPageNo() {
		return 1;
	}
	/** 取得尾页**/
	public long getBottomPageNo() {
		return getTotalpage();
	}
	
	/**上一页**/
	public int getPreviousPageNo() {
		if (currentpage <= 1) {
			return 1;
		}
		return currentpage - 1;
	}
	
	/**下一页* */
	public long getNextPageNo() {
		if (currentpage >= getBottomPageNo()) {
			return getBottomPageNo();
		}
		return currentpage + 1;	
	}
	
	public int getPagecode() {
		return pagecode;
	}

	public void setPagecode(int pagecode) {
		this.pagecode = pagecode;
	}

	public PageView(int maxresult, int currentpage) {
		this.maxresult = maxresult;
		this.currentpage = currentpage;
	}
	
	public void setPageData(PageData<T> pageData){
		setTotalrecord(pageData.getTotalRecords());
		setRecords(pageData.getResultlist());
	}
	
	public long getTotalrecord() {
		return totalrecord;
	}
	public void setTotalrecord(long totalrecord) {
		this.totalrecord = totalrecord;
		setTotalpage(this.totalrecord%this.maxresult==0? this.totalrecord/this.maxresult : this.totalrecord/this.maxresult+1);
	}
	public List<T> getRecords() {
		return records;
	}
	public void setRecords(List<T> records) {
		this.records = records;
	}
	public PageIndex getPageindex() {
		return pageindex;
	}
	public long getTotalpage() {
		return totalpage;
	}
	public void setTotalpage(long totalpage) {
		this.totalpage = totalpage == 0 ? 1 : totalpage;
		this.pageindex = getPageIndex(pagecode, currentpage, totalpage);
	}
	public int getMaxresult() {
		return maxresult;
	}
	public int getCurrentpage() {
		return currentpage;
	}


	public int getLastpage() {
		return lastpage;
	}
	
  public static PageIndex getPageIndex(long viewpagecount, int currentPage, long totalpage){
		long startpage = currentPage-(viewpagecount%2==0? viewpagecount/2-1 : viewpagecount/2);
		long endpage = currentPage+viewpagecount/2;
		if(startpage<1){
			startpage = 1;
			if(totalpage>=viewpagecount) endpage = viewpagecount;
			else endpage = totalpage;
		}
		if(endpage>totalpage){
			endpage = totalpage;
			if((endpage-viewpagecount)>0) startpage = endpage-viewpagecount+1;
			else startpage = 1;
		}
		return new PageIndex(startpage, endpage);
  }
  
	public PageView() {
		 
	}
	
	public void setCurrentpage(int currentpage) {
		this.currentpage = currentpage;
	}
	public void setMaxresult(int maxresult) {
		this.maxresult = maxresult;
	}
	

}




配置
 
<!-- 配置sessioFactory -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation">
			<value>/WEB-INF/hibernate.cfg.xml</value>
		</property>
	</bean>
	
	<!-- 配置通用dao的注入 -->
	<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
		 <property name="sessionFactory" ref="sessionFactory"></property>  
	</bean>
	
	 <bean id="genericDao" abstract="true" class="hibernate.basedao.GenericDaoImpl">
		 <property name="hibernateTemplate" ref="hibernateTemplate"/>
   		  <property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	 
	<!-- 配置事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	

	<!-- 配置事务的传播特性 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="assign*" propagation="REQUIRED" />
			<tx:method name="modify*" propagation="REQUIRED" />
			<tx:method name="del*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="*" read-only="true" />
		</tx:attributes>
	</tx:advice>
	
	
	<aop:config proxy-target-class="true">
		<!-- ************************for module:csl**************************************** -->
		<aop:advisor advice-ref="txAdvice"
			pointcut="execution (* co.th.csl.*.service.*.*(..))" />
			
		<aop:advisor advice-ref="txAdvice"
			pointcut="execution (* co.th.csl.*.*.service.*.*(..))" />
		<!-- ************************for module:csl**************************************** -->
		
		
		<!-- ************************for module:content**************************************** -->
		<aop:advisor advice-ref="txAdvice"
			pointcut="execution (* co.th.content.*.*.service.*.*(..))" />
		<!-- ************************for module:content**************************************** -->
	
	</aop:config>
	<!-- 配置哪些类哪些方法使用事务 -->

	<!-- <aop:config>
		配置切入点(定义哪些方法要进行事务处理) 
		<aop:pointcut id="allManager"
		expression="execution(* co.th.csl.contact.service.*.*(..))" />
		定义advice 
		<aop:advisor advice-ref="txAdvice" pointcut-ref="allManager" />
		</aop:config>
	-->

分享到:
评论
4 楼 strive708 2013-04-16  
yugiohboy 写道
xml文件: <bean id="testDao"  parent="genericDao"/>
测试类:GenericDao<People>  beanFactoryDemo=( GenericDao<People>  )factory.getBean("testDao");
System.out.println(((GenericDao<People>)beanFactoryDemo) .get( new Integer(1)).getName());
会抛出异常请问怎样正确调用?
Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.Object; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.Object
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:676)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)

楼上的问题我也遇到了,希望楼主能帮忙解答一下吧。急求。
3 楼 yugiohboy 2011-08-19  
xml文件: <bean id="testDao"  parent="genericDao"/>
测试类:GenericDao<People>  beanFactoryDemo=( GenericDao<People>  )factory.getBean("testDao");
System.out.println(((GenericDao<People>)beanFactoryDemo) .get( new Integer(1)).getName());
会抛出异常请问怎样正确调用?
Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.Object; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.Object
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:676)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
2 楼 silentJesse 2011-02-18  
DancingPig 写道
楼主再发的详细点PageData GenericsUtils两个类能否也发出来参考下
谢谢啦


你晚上再来看吧..
1 楼 DancingPig 2011-02-18  
楼主再发的详细点PageData GenericsUtils两个类能否也发出来参考下
谢谢啦

相关推荐

    再发一个基于Hibernate+Spring 泛型GenericDao 的工程源码.

    标题中的“基于Hibernate+Spring 泛型GenericDao”的工程源码指的是一个整合了Spring框架和Hibernate ORM技术的项目,其中使用了泛型设计模式来实现数据访问对象(DAO)。这个项目可能旨在提供一种通用、可复用且...

    Struts2+hibernate+spring整合泛型DAO

    而DAO层通过泛型接口和实现类,实现了对所有实体类的通用操作,例如: ```java public interface GenericDao&lt;T&gt; { void save(T entity); T findById(Class&lt;T&gt; clazz, Serializable id); List&lt;T&gt; findAll(Class...

    虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27

    Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...

    基于泛型的通用Dao接口和hibernate的实现

    基于泛型的通用Dao接口和Hibernate的实现 基于泛型的通用Dao接口是指使用泛型来实现数据访问对象(DAO)的接口,主要是在使用 Hibernate 或 JPA 时使用。泛型可以使得DAO接口更灵活、更通用。 泛型Dao接口的优点:...

    泛型dao 泛型dao 泛型dao

    Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...

    Hibernate泛型Dao

    在传统的Hibernate使用中,针对每个实体类,我们都需要创建一个对应的Dao(Data Access Object)接口及其实现类,这无疑增加了大量重复的代码。泛型Dao的出现,就是为了解决这个问题,它允许开发者通过泛型来定义一...

    Hibernate泛型DAO及使用方法借鉴.pdf

    在Java开发中,特别是使用Spring+Hibernate框架时,泛型DAO(Data Access Object)是常见的设计模式,它提供了对数据库操作的一般化接口,以提高代码的重用性和可维护性。本文将探讨如何设计和使用泛型Hibernate DAO...

    Hibernate泛型DAO(结合spring模板支持)

    至于`Dao经典泛型.doc`文件,可能是更深入的关于Hibernate泛型DAO的文档,可能包含了如何配置Spring、如何处理复杂查询以及如何优化泛型DAO的更多细节。阅读这份文档将进一步提升你对泛型DAO的理解和应用能力。 ...

    Hibernate泛型DAO接口,大部分通用都已包括

    总的来说,"Hibernate泛型DAO接口,大部分通用都已包括"意味着我们已经定义了一套完整的、适用于多种实体类的DAO操作,通过泛型减少代码冗余,提高了代码的可复用性。同时,通过`DaoUtil`这样的工具类,我们可以更...

    Hibernate泛型DAO及使用方法.doc

    在Java开发中,尤其是涉及到持久层操作时,Hibernate是一个非常流行的ORM(对象关系...在Spring+Hibernate环境下,通过合理地实现和使用泛型DAO,可以大大提高开发效率,降低维护难度,同时保持代码的整洁和可维护性。

    Struts+Spring+Hibernate开发实例.pdf

    - **IBaseDao** 是自定义的基础数据访问接口,文档中提到的这个接口定义了打开Session的方法以及执行HQL查询的抽象方法,具体实现可以根据不同的数据访问技术来完成。 **Hibernate框架** Hibernate是一个面向Java...

    spring hibernate 泛型DAO

    本文将深入探讨“Spring Hibernate 泛型DAO”这一主题,以及如何通过泛型DAO实现更加高效、可复用的代码。 首先,让我们理解什么是DAO(Data Access Object)模式。DAO是一种设计模式,它的主要作用是隔离业务逻辑...

    2.java定义泛型类.zip

    2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip2.java定义泛型类.zip...

    SSH2全注解整合(spring2.5+hibernate3.3+struts2.1+泛型DAO+proxool连接池)

    例如,一个BaseDAO接口可以定义基本的增删改查方法,而具体的DAO实现类只需要指定对应的实体类型即可。 Proxool连接池是一种数据库连接池实现,它能够有效地管理和复用数据库连接,提高系统性能,减少数据库资源的...

    Flex+J2EE实例(cairngorm+blazeDS+hibernate+spring) part3.pdf

    5. **集成Spring和Hibernate**:最后一步是确保Spring容器能够管理Hibernate DAO实例,这通常通过Spring的依赖注入来实现。 #### 结论 通过上述步骤,我们成功地在Flex+J2EE架构中集成了Spring和Hibernate。这种...

    ssh2 + dao泛型

    博客中可能还会涉及如何配置SSH2框架,如Spring的bean配置、Hibernate的实体映射以及Struts的action配置等。在实际项目中,为了确保SSH2与DAO泛型的无缝集成,还需要考虑事务管理、异常处理、性能优化等问题。 在...

    3.java实例化泛型类.zip

    3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3....

    Spring/泛型Hibernate的实现

    ### 泛型Hibernate的实现与Spring集成 #### 一、泛型Hibernate概念及其实现 在Java开发领域,尤其在企业级应用开发中,Hibernate框架因其强大的对象关系映射(ORM)能力而受到广泛欢迎。泛型Hibernate是利用Java...

    4.java泛型的限制.zip

    4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...

    大家看看我设计的泛型DAO(使用Spring的Anotation和Hibernate)

    本篇文章将深入探讨一个使用Spring注解和Hibernate实现的泛型DAO设计,以提高代码的复用性和可维护性。 首先,`HibernateBaseDao.java`是基础的Hibernate DAO类,它提供了对Hibernate操作的基本封装。这个类通常会...

Global site tag (gtag.js) - Google Analytics