jpaマルチテーブルleftjoinクエリー、カスタム戻り結果

12726 ワード

sqlコード
カスタム戻り結果
package com.cdp.ecosaas.coredb.uua.sync.vo;

import java.io.Serializable;

public class UuaUserNotifyTemp implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    private String id;

    private String sysCode;

    private String sysName;

    private String idNumber;

    private String email;

    private String phone;

    private String tenantId;

    private String isAuto;

    private String isEmail;

    private String isMobile;

    private String emailLang;

    private String msmLang;

    private String mailNotify;

    private String mobileNotify;

    private String state;


    public String getIdNumber() {
        return idNumber;
    }

    public void setIdNumber(String idNumber) {
        this.idNumber = idNumber;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getTenantId() {
        return tenantId;
    }

    public void setTenantId(String tenantId) {
        this.tenantId = tenantId;
    }

    public String getIsAuto() {
        return isAuto;
    }

    public void setIsAuto(String isAuto) {
        this.isAuto = isAuto;
    }

    public String getIsEmail() {
        return isEmail;
    }

    public void setIsEmail(String isEmail) {
        this.isEmail = isEmail;
    }

    public String getIsMobile() {
        return isMobile;
    }

    public void setIsMobile(String isMobile) {
        this.isMobile = isMobile;
    }

    public String getEmailLang() {
        return emailLang;
    }

    public void setEmailLang(String emailLang) {
        this.emailLang = emailLang;
    }

    public String getMsmLang() {
        return msmLang;
    }

    public void setMsmLang(String msmLang) {
        this.msmLang = msmLang;
    }

    public String getMailNotify() {
        return mailNotify;
    }

    public void setMailNotify(String mailNotify) {
        this.mailNotify = mailNotify;
    }

    public String getMobileNotify() {
        return mobileNotify;
    }

    public void setMobileNotify(String mobileNotify) {
        this.mobileNotify = mobileNotify;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    
    public String getSysCode() {
        return sysCode;
    }

    
    public void setSysCode(String sysCode) {
        this.sysCode = sysCode;
    }

    
    public String getSysName() {
        return sysName;
    }

    
    public void setSysName(String sysName) {
        this.sysName = sysName;
    }

    
    public String getId() {
        return id;
    }

    
    public void setId(String id) {
        this.id = id;
    }

    public UuaUserNotifyTemp(String id, String sysCode, String sysName, String idNumber, String email, String phone,
            String tenantId, String isAuto, String isEmail, String isMobile, String emailLang, String msmLang,
            String mailNotify, String mobileNotify, String state) {
        super();
        this.id = id;
        this.sysCode = sysCode;
        this.sysName = sysName;
        this.idNumber = idNumber;
        this.email = email;
        this.phone = phone;
        this.tenantId = tenantId;
        this.isAuto = isAuto;
        this.isEmail = isEmail;
        this.isMobile = isMobile;
        this.emailLang = emailLang;
        this.msmLang = msmLang;
        this.mailNotify = mailNotify;
        this.mobileNotify = mobileNotify;
        this.state = state;
    }

    
    

}

 
 
sqlコード
@Query(value = "SELECT new com.cdp.ecosaas.coredb.uua.sync.vo.UuaUserNotifyTemp(uu.id,ue.sysCode,ue.sysName,uu.idNumber,uu.email,uu.phone,ue.tenantId,unc.isAuto,unc.isEmail,unc.isMobile,unc.emailLang,unc.msmLang, uu.mailNotify, uu.mobileNotify, uu.state) FROM UuaUser uu LEFT JOIN UuaUserExtsysRef uuer on uu.id = uuer.id.userId LEFT JOIN UuaExtsy ue on ue.id = uuer.id.extsysId LEFT JOIN UuaNotifyConfig unc ON unc.tenantId = ue.tenantId where unc.isAuto = 1 and (uu.state = 0 or uu.state is null) and (uu.mailNotify = 0 or uu.mailNotify is null) and (uu.mobileNotify = 0 or uu.mobileNotify is null) ")
    List findNotifyUserTemp();

注意点1まずもとのsqlを书いて保证して実行することができて、カスタマイズして结果を返してhql文だけを支持して、原生のsqlを支持しません
2テーブル接続時に使用するオブジェクトの属性接続に注意してください.例えば、属性がid、データベースフィールドが_id、ここではidを使っていますが、sqlが実行できればhqlも必ず実行できます.
3高バージョンのhibernateの使用に注意
5.2.12.Final
前にみんなが言ったhql leftjoinはonがバージョンであることを認識しない問題です
4カスタム戻り結果はhqlが書いたフィールドの順序に対応します.
 
jpaを使用する場合は、テーブル間の関連関係を維持することをお勧めします.特に、ロードポリシーおよびカスケード関係.全部投げ捨てないで
転載先:https://www.cnblogs.com/chenyangwang/p/11060667.html