栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JPA:LEFT JOIN 在hql语句中使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JPA:LEFT JOIN 在hql语句中使用

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 {

    
    public static final String TABLE_NAME = "u_user_tbl";

    
    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 roles;

    
    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "a_emp_group_tbl",     //中间表的表名
            joinColumns = {@JoinColumn(name = "emp_id")})  //本表的主键列明
    @ApiModelProperty(value = "分组")
    private Set groups;
}

Hpl语句
    
    private String getHql(MemberFindDTO findDTO, Map 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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号