Java Hibernate Select Statement

public List GetAllFunctionByUserId(int pUserId) {

if(session==null)
{
session=GetSession();
}
/**
List<RoleAssign> lstRoleAssigns=session.createCriteria(RoleAssign.class)
.createAlias("Role", "r",Criteria.LEFT_JOIN)
.add(Restrictions.eq("r.isActiveRole",true))
.list();
*/


//test result:pass
//List<RoleAssign> lstRoleAssigns=session.createCriteria(RoleAssign.class)
//.createAlias("targetRole", "r",Criteria.LEFT_JOIN)
//.add(Restrictions.eq("r.isActiveRole",true))
//.createAlias("targetUser", "u",Criteria.LEFT_JOIN)
//.add(Restrictions.eq("u.isActiveUser",true)).list();//test result:pass

/**
*
select * from user u join (select r.role_name,ra.fk_user_id from role_assign ra left join role r on ra.fk_role_id =r.role_id ) raa on raa.fk_user_id=u.user_id where u.user_id=2

select * from role_assign ra right join function_assign fa on ra.fk_role_id=fa.fk_role_id where ra.fk_user_id=2
*/

List<RoleAssign> lstRoleAssigns=session.createCriteria(RoleAssign.class)
.createAlias("targetRole", "r",Criteria.LEFT_JOIN)
.add(Restrictions.eq("r.isActiveRole",true))
.createAlias("targetUser", "u",Criteria.LEFT_JOIN)
.add(Restrictions.eq("u.userId",pUserId ))
.list();


List<Function> lstFunction=new ArrayList<Function>();
List<String> lstFunctionName=new ArrayList<String>();

if(lstRoleAssigns!=null&&lstRoleAssigns.size()>=1)
{
for(RoleAssign ra:lstRoleAssigns)
{
List<FunctionAssign> lstFunctionAssigns=session.createCriteria(FunctionAssign.class)
.createAlias("targetFunction","f",Criteria.LEFT_JOIN)
.add(Restrictions.eq("f.isActiveFunction", true))
.createAlias("targetRole", "r",Criteria.LEFT_JOIN)
.add(Restrictions.eq("r.roleId",ra.getTargetRole().getRoleId()))
.list();

if(lstFunctionAssigns!=null&&lstFunctionAssigns.size()>=1)
{
for(FunctionAssign fa:lstFunctionAssigns)
{
Function f=fa.getTargetFunction();
if(!lstFunction.contains(f))
{
lstFunction.add(f);
//lstFunction.addAll(lstFunction);
}
}
}
}
}

//** test result: pass
//StringBuilder strFunctionByUserId=new StringBuilder("select u.user_id as userId, u.user_name as userName, role_id as roleId ,function_id as functionId from user u join");
StringBuilder strFunctionByUserId=new StringBuilder("select u.user_id as userId, u.user_name, role_id,function_id as functionId from user u join");
strFunctionByUserId.append(" (select ra.fk_user_id , ra.fk_role_id as role_id ,fa.fk_function_id as function_id from role_assign ra left join function_assign fa on fa.fk_role_id =ra.fk_role_id)");
strFunctionByUserId.append(" raa on raa.fk_user_id=u.user_id where u.user_id=:userId");
SQLQuery functionSQLQuery =session.createSQLQuery(strFunctionByUserId.toString());
functionSQLQuery.setInteger("userId",pUserId);
functionSQLQuery.addScalar("userId",Hibernate.INTEGER)
//.addScalar("userName",Hibernate.STRING)
//.addScalar("roleId",Hibernate.INTEGER)
.addScalar("functionId",Hibernate.STRING);
//只是这返回值怎么处理呢,想让它是一个list的形式
//List<Object[]> o=functionSQLQuery.list();//.uniqueResult();

List<Hashtable<Integer,String>> o=new ArrayList();
List<Object[]> od=functionSQLQuery.list();

for(int i=0;i<od.size();i++)
{
Hashtable<Integer,String> odItem=new Hashtable();
odItem.put((Integer)od.get(i)[0],(String) od.get(i)[1]);
o.add(odItem);
}



/**
StringBuilder strFunctionByUserId=new StringBuilder("select * from user u join");
//想要取的字段就单独起个别名,
//其余的为了关联表达式时需要担心去不全就用别名.*
//如果两个表中有同名的字段:比如fk_role_id,必须要单独起别名
strFunctionByUserId.append(" (select fa.*,ra.fk_user_id as fk_user_id from role_assign ra left join function_assign fa on fa.fk_role_id =ra.fk_role_id)");
strFunctionByUserId.append(" raa on raa.fk_user_id=u.user_id where u.user_id=:userId");
SQLQuery functionSQLQuery =session.createSQLQuery(strFunctionByUserId.toString());
functionSQLQuery.setInteger("userId",pUserId);
//functionSQLQuery.addScalar("")
//functionSQLQuery.addScalar("")
//functionSQLQuery.addScalar("")
List o=functionSQLQuery.list();//.uniqueResult();
*/

//for(int i=0;i<lstFunctions2.size();i++)
//{
// System.out.println(lstFunctions2.get(i).getFunctionName());
//System.out.println(((User)o.get(i)).getUserName());//java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
//System.out.println(((Function)o.get(i)).getFunctionName());//java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
//System.out.println(((Role)o.get(i)).getRoleName());//java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
//}


List<RoleAssign> lstRoleAssigns3= session.createQuery("from RoleAssign ra ,FunctionAssign fa where ra.targetRole.roleId=fa.targetRole.roleId and ra.targetUser.userId=?").setInteger(0, 2).list();

return lstFunction;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值