跳到主要内容

Oracle下Hibernate查询返回自定义Bean

·383 字·1 分钟

开发过程中,有时会遇到操作多表数据,返回的数据属于多表字段,将这些字段封装成一个bean,Hibernate查询返回自定义bean

代码示例:

		//第一种:使用addScalar()后使用Transformers.aliasToBean()自动完成bean数据封装
		Session session = null;
		List<CC03DTO> list = new ArrayList<CC03DTO>();
		
		try {
			session = HibernateSessionFactory.factory.openSession();
			session.beginTransaction();
			
			
			Query query = session
			.createSQLQuery(
					"select t.aac001,t.aac002,t.aac006 from cc03 t WHERE aac002 = '1' ")
			.addScalar("aac001")
			.addScalar("aac002")
			.addScalar("aac006")
			.setResultTransformer(
					Transformers.aliasToBean(CC03DTO.class);
			
			list = query.list();
		} catch (Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
			throw new LemisException(e,
					Constants.LEMIS_ERRNO_BUSINESS_EXCEPTION_M);
		} finally {
			if (session != null) {
				session.close();
			}
		}


		//第二种,手动赋值
		Session session = null;
		Nm_Zj92_WebDTO dto = new Nm_Zj92_WebDTO();
		
		try {
			session = HibernateSessionFactory.factory.openSession();
			
			String sql = "";
	        sql = " select t.aab004,t.aab001,t.aab998 from AB01 t where 1=1 ";
	        if (azj924 != null && !"".equals(azj924) {
	            sql +=  " and t.aab998 = ?1";
	        }
	        Query q = null;
	        
	        if (azj924 != null && !"".equals(azj924) {
	        	q.setParameter(1, "" + azj924 + "");
	        }
	        
	        ((SQLQuery) q).addScalar("aab004").addScalar("aab001").addScalar("aab998");
	        
	        List list = q.list();
	        if(list != null && !list.isEmpty(){
	        	Object[] object = (Object[]) list.get(0);
	        	dto.setAab004(object[0].toString() == null ? "" : object[0].toString();
	        	dto.setAab001(Long.valueOf(object[1].toString());
	        	dto.setAzj924(object[2].toString() == null ? "" : object[2].toString();
	        }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if (session != null) {
				session.close();
			}
		}

CC03DTO:

import java.math.BigDecimal;
import java.sql.Timestamp;

public class CC03DTO {
    private BigDecimal aac001;
    private String aac002;
    private Timestamp aac006;

    public BigDecimal getAac001() {
        return aac001;
    }

    public void setAac001(BigDecimal aac001) {
        this.aac001 = aac001;
    }

    public String getAac002() {
        return aac002;
    }

    public void setAac002(String aac002) {
        this.aac002 = aac002;
    }

    public Timestamp getAac006() {
        return aac006;
    }

    public void setAac006(Timestamp aac006) {
        this.aac006 = aac006;
    }
}