在ssh2开发中遇到,数据库中并没有设置表的外键关系,用hibernate的hql就不能达到关联查询的效果。
现在只能写sql关联,再写代码把结果集转成对象列表 。
现在用 SQLQuery.addEntity()方法可以实现hibernate自动把结果集转成对象列表。
StringBuffer sql = new StringBuffer();
sql.append("SELECT a.* FROM T_MB_Account a ");
sql.append("LEFT JOIN t_user_users u ON u.ID=a.UserID ");
sql.append("WHERE 1=1 ");
if(accountName.length()>0 && userName.length()==0){
sql.append("and a.accountName like '%").append(accountName).append("%'");
}else if(accountName.length()==0 && userName.length()>0){
sql.append("and u.name like '%").append(userName).append("%'");
}else if(accountName.length()>0 && userName.length()>0){
sql.append("and (a.accountName like '%").append(accountName).append("%'");
sql.append("or u.name like '%").append(userName).append("%'").append(")");
}
sql.append(" order by a.accountId");
SQLQuery sQLQuery = session.createSQLQuery(sql.toString());
sQLQuery.setFirstResult(firstResult);
sQLQuery.setMaxResults(maxResults);
//把sql的查询结果 插入到对象----list<Object[]>形式存储
sQLQuery.addEntity("a", TMbAccount.class);
List<TMbAccount> lst = sQLQuery.list();
sQLQuery.addEntity("a", TMbAccount.class);是关键,TMbAccount是要转换的对象,当然TMbAccount的映射也是要配置好的