JPA:LEFT JOIN 在hql语句中使用

  • 背景
    • 表结构
    • Hpl语句

背景

Springboot 项目中,人员表关联公司的组织架构树的,人员可以再多个部门。这时候就需要连表查询,使用left join,因为jpa知道两张表中的关系,所以不需要使用on

表结构

@Data
@Entity
@ApiModel(value = "企业员工实体类")
@Accessors(chain = true)
@javax.persistence.Table(name = MemberEntity.TABLE_NAME, indexes = {@Index(name = "index_mobile", columnList = "mobile")})
@org.hibernate.annotations.Table(appliesTo = MemberEntity.TABLE_NAME, comment = "公司人员表") //表注释
public class UserEntity extends BaseEntity implements Serializable {/*** tableName*/public static final String TABLE_NAME = "u_user_tbl";/*** UUID*/private static final long serialVersionUID = 959562203894894703L;/*** 姓名*/@NotBlank(message = "姓名不能为空")@Size(min = 0, max = 64, message = "姓名名过长")@ApiModelProperty(value = "姓名", required = true)@Column(length = 64)private String name;/*** 用户对应的角色信息*/@ManyToMany(fetch = FetchType.EAGER)//立即从数据库中进行加载数据;@JoinTable(name = "m_user_role_tbl", //中间表的表名joinColumns = {@JoinColumn(name = "userId")}, //本表的主键inverseJoinColumns = {@JoinColumn(name = "roleId")}) //所映射表的主键@Where(clause = "enable = 0")private Set<RoleEntity> roles;/*** 分组*/@ElementCollection(fetch = FetchType.EAGER)@CollectionTable(name = "a_emp_group_tbl",     //中间表的表名joinColumns = {@JoinColumn(name = "emp_id")})  //本表的主键列明@ApiModelProperty(value = "分组")private Set<Long> groups;
}

Hpl语句

    /*** 获取HQL和拼装参数** @param findDTO* @param params* @return*/private String getHql(MemberFindDTO findDTO, Map<String, Object> params) {StringBuffer startHql = new StringBuffer("from MemberEntity t ");StringBuffer hql = new StringBuffer("");hql.append(" where t.enable = :enable ");params.put("enable", findDTO.getEnable());// left join查询 g.id 不用疑惑.就是他if (findDTO.getGroup() != null) {startHql.append(" left join t.groups g ");hql.append(" and g.id = :groupId ");params.put("groupId", findDTO.getGroup());}// 排序String orderBy = StringUtils.isNotBlank(findDTO.getOrderBy()) ? findDTO.getOrderBy() : "id desc";hql.append(" order by t." + orderBy);startHql.append(hql).toString();log.info("企业sql语句: {}",startHql.toString());return startHql.toString();}

打印出来的结果:

 from UserEntity t  left join t.groups g  where t.enable = :enable  and g.id = :groupId order by t.id desc

JPA:LEFT JOIN 在hql语句中使用相关推荐

  1. HQL语句中数据类型转换,及hibernate中createQuery执行hql报错

    一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...

  2. 【Hibernate】Hql语句in中带参数的写法

    在页面中通过自定义标签查询一个列表的多种状态的数据,如下,查状态为1和3的数据: [@s_icloud_resource_list count='8' orderBy='1' type='4' sta ...

  3. HQL语句的基本语法和使用

     HQL查询 Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性 ,因此 H ...

  4. 三、通过session操作hibernate(hql语句)

    在没有将spring和hibernate整合在一起的时候,要使用hibernate,在持久层需要如下步骤: 一.在还没有对hibernate进行spring的整合的时候,我们需要写一个session工 ...

  5. mysql hql查询语句_查询hql语句

    Hibernate-HQL 了解HQL 一.HQL定义 1.Hibernate QueryLanguage,Hibernate查询语言 2.HQL是面向对象的查询语言 3.HQL提供了丰富灵活的查询特 ...

  6. mysql hql查询语句_使用Query进行HQL语句查询和SQL语句查询

    HQL的语法比较简单,与普通SQL的区别之处是针对对象的不同,在查询语句中将sql中的表名替换成了sql中的持久化类名,因为hibernate机制是基于对象进行查询的. 不带参数的查询,语句是&quo ...

  7. Hibernate查询技术之HQL语句

    1.session中的get( )和load( )方法来查询对象.但其查询功能有限. private void testGet(){//1.初始化,读取配置文件hibernate.cfg.xmlCon ...

  8. HQL语句的动态赋值

    HQL语句的动态赋值 1."?"号代表参数 2.自定义参数名称 在JDBC编程中,PreparedStatement对象为开发提供了方便,他不但可以为动态语句进行赋值,而且可以避免 ...

  9. 简易HQL语句转换为可执行的SQL语句

    主要利用Hibernate中封装的一个转换器实现类:QueryTranslatorImpl, hql语句中无参数时,用下面的方法: /** * 将hql语句转换为sql语句,无参数 * * @para ...

最新文章

  1. zabbix 概念理解
  2. itoa函数的递归实现(二级指针实现)
  3. (47)逆向分析 KiSystemService 函数填充 _KTRAP_FRAME 部分
  4. 面试无忧之Zookeeper总结心得
  5. 存储变革 IBM V5000四大优势助用户破旧立新
  6. 第一百二十五期:程序员的自我救赎,使用Python开发性格分析工具
  7. 文本标点英文对齐_电脑健盘中的所有英文组合意思超值解释建议收藏
  8. Leetcode 杂题
  9. 【华为敏捷/DevOps实践】3. 如何开好站立会议
  10. vue中对话框关闭以后清空对话框中input,select内容
  11. Android进阶学习方法总结(内附阿里P7进阶学习全套资料)
  12. Helm — Chart介绍
  13. 软件项目管理之历时估算(工程评估评审技术【Program Evaluation And Review Technique,PERT】)
  14. 如何根据函数,绘制出函数的图像
  15. JAVA后端面经总结
  16. 《Python基础教程》学习笔记——条件、循环及其他语句
  17. 【深度学习,NLP,LM】Alpaca-Lora ,Colab上部署与调用
  18. 架构设计之如何写架构设计说明书
  19. [计算机通信网络]以太网的帧格式详解
  20. 北邮计算机学院盲审名单,北京邮电大学

热门文章

  1. mysql建立联合索引_mysql之联合索引
  2. 嫖娼旷工被开除,员工不服上诉,法院判了···
  3. 欧几里得范数(L2范数)
  4. dsoframer打包cab加签名
  5. vc++常用函数方法
  6. 传奇身上装备升级系列脚本,以及UPGRADEITEMEX 脚本的详细参数解释
  7. python图像转“抽象”画风
  8. java app框架1
  9. 酒便利“20分钟喝上放心酒”的故事,能打动北交所吗?
  10. Spring框架中都用到了哪些设计模式?