目的:hibernate 多张表关联查询,用到了原生的sql,那么用到SQLQuery,返回的是Object[],如果字段太多,在后期维护上很不方便(obj[0],obj[1],,,,),为了维护方便,就改成自定义实体;代码如下:
StringBuffer sql = new StringBuffer();
sql.append(" select cust.CM_Code " );
...(这里放需要反回的字段)
sql.append(" from 表1 cos ");
sql.append(" LEFT JOIN 表2 ord ON (cos.CO_ID = ord.CO_ID) " );
sql.append(" inner join 表3 cust on (ord.CM_ID = cust.CM_ID) " );
sql.append(" inner join 表4 country on (ord.CT_Code_Destination = country.CT_Code) " );
sql.append(" inner join 表5 ordattach on (ord.CO_ID = ordattach.CO_ID) " );
sql.append(" where 1 = 1 ");
//Set query parameter
Session session = super.getSession();
SQLQuery query = session.createSQLQuery(sql.toString());
query.setParameter("queryOrderNo", “123456”);
...(这里放字段对应的参数)
query.addScalar("CM_Code",StandardBasicTypes.STRING);
... (这里放返回的数据类型)
query.setResultTransformer(Transformers.aliasToBean(javaBean.class));
//Set query return
List<CustomerOrderForecastDTO> returnList = query.list();
简化后的代码入上,仅仅作参考,需要耐心看完才能懂..