`

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;
}
分享到:
评论

相关推荐

    使用hibernate对oracle读取blob

    ResultSet resultSet = statement.executeQuery("SELECT content FROM media WHERE id = " + id); resultSet.next(); Blob blob = resultSet.getBlob("content"); InputStream blobInput = blob.getBinaryStream(); ...

    hibernate数据库通用SQL代码

    在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了与数据库的交互,使得开发者可以更专注于业务逻辑而不是底层的SQL操作。本文将详细讲解如何使用Hibernate来编写通用的数据库操作代码,包括插入...

    hibernate执行原生sql语句

    Hibernate 是一种流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在一些情况下,我们需要直接执行原生 SQL 语句,而不是使用 Hibernate 的查询语言(HQL)。本文将介绍...

    Hibernate3使用经验

    String sql = "select * from user_manager t where t.user_id = " + userId; ``` 3. **获取 Connection**:通过 `Session` 的 `connection()` 方法获得数据库连接。 ```java Connection conn = session....

    hibernate 执行原生sql的几种方式

    在Java的持久化框架Hibernate中,执行原生SQL(Native SQL)是常见需求,尤其是在处理特定数据库特性或者优化性能时。本篇文章将详细介绍在Hibernate中执行原生SQL的几种方式,以及它们各自的适用场景和优缺点。 1....

    struts+hibernate+jdbc双表查询

    Struts、Hibernate和JDBC是Java Web开发中的三个重要组件,它们各自负责应用程序的不同层面。在构建复杂的Web应用时,通常会结合使用这些技术来实现高效的数据管理。 Struts是MVC(Model-View-Controller)框架的一...

    使用JDBC和Hibernate来写入Blob型数据到Oracle中

    pstmt = conn.prepareStatement("select content from tablename where name = ? for update"); pstmt.setString(1, "name"); ResultSet rset = pstmt.executeQuery(); if (rset.next()) { BLOB blob = (BLOB) ...

    java读取本地.db文件实例

    import java.sql.Statement; public class Test { public static void main(String[] args) { try { Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:/path/to...

    java连接access的mdb文件

    不过,为了提高效率和可维护性,建议使用更现代的JDBC驱动,如Apache的DBCP或C3P0,以及ORM框架如Hibernate或MyBatis,它们提供了更好的性能和更方便的API。 总的来说,Java连接Access MDB文件涉及到JDBC接口、ODBC...

    java连接mysql数据库实现简单的学生成绩管理

    随着学习的深入,你可以使用PreparedStatement来防止SQL注入,或者使用更高级的ORM框架如Hibernate或MyBatis,它们可以简化数据库操作,提供更多的功能和更好的性能。 在实际项目中,可能还需要处理异常,比如`...

    java数据库应用程序编程指南

    12. **SQL语言**:掌握基本的SQL语法,包括SELECT、INSERT、UPDATE、DELETE以及JOIN、子查询等高级概念,是编写Java数据库应用程序的基础。 13. **批处理操作**:JDBC API也支持批处理,一次提交多个SQL语句,提高...

    JAVA中怎样连接数据库

    本文将详细介绍几种常用的在Java中连接数据库的方法,包括使用ODBC桥接、直接使用JDBC驱动以及利用ORM框架如Hibernate等。 #### 一、使用ODBC桥接 ODBC(Open Database Connectivity,开放式数据库连接)是一种...

    hibernate 3.1+tomcat 5.5.x(配置jndi)

    ResultSet rs = stmt.executeQuery("SELECT * FROM sample_table"); while (rs.next()) { // 处理结果集 } rs.close(); stmt.close(); conn.close(); } catch (NamingException | SQLException e) { // ...

    java代码实现的sql语句效果

    首先,要使用Java执行SQL,我们需要导入`java.sql`包中的相关类,如`Connection`、`Statement`、`PreparedStatement`和`ResultSet`等。`Connection`对象代表了数据库的连接,`Statement`或`PreparedStatement`用于...

    java实现数据库操作

    框架如Hibernate和MyBatis简化了Java与数据库的交互,它们提供了一种对象关系映射(ORM)机制,使得可以使用Java对象来操作数据库记录,减少了手动编写SQL的复杂性。 通过以上步骤和概念,开发者可以利用Java高效...

    mysql 数据库备份 java 源代码

    首先,我们需要创建一个JDBC连接,然后通过Statement或PreparedStatement对象执行SQL命令,例如`SELECT * FROM table`来获取数据,或者使用`SHOW CREATE TABLE`来获取表的创建语句。 在Java源代码中,我们可以设计...

    java检查sql语法是否正确

    总结来说,Java中检查SQL语法正确性的方法包括直接使用JDBC API的`Statement`或`PreparedStatement`,使用ORM框架的验证功能,以及借助数据库管理工具。选择哪种方法取决于你的具体需求和项目结构。在实际开发中,...

    java Pagination(分页并操作)

    PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, (page - 1) * pageSize); // 偏移量计算 pstmt.setInt(2, pageSize); // 限制大小 ResultSet rs = pstmt.executeQuery(); ``` ...

    java 企业管理 SQL

    8. **ORM框架**:Object-Relational Mapping(ORM)框架如Hibernate和MyBatis简化了Java与数据库之间的交互。它们自动处理SQL和结果集映射,使开发者可以专注于业务逻辑。 9. **数据库设计**:理解数据库设计的基本...

Global site tag (gtag.js) - Google Analytics