• JPA联合主键@EmbeddedId使用详解附查询例子


    花了2个小时的时间解决这个问题,网上资料太少,记录下
     
     
    详情看源文件TBicPrmCompute,TBicPrmComputePK
    package com.isoftstone.core.domain;
    
    import java.io.Serializable;
    import javax.persistence.*;
    
    
    /**
     * The persistent class for the T_BIC_PRM_COMPUTE database table.
     * 
     */
    @Entity
    @NamedQueries( {
        @NamedQuery(name = "findPrmComputeById", query = "select d from TBicPrmCompute d where d.id.CBisCode = ?1 and d.id.CBicNo = ?2 and d.id.CProdNo = ?3")
    } )
    @Table(name="T_BIC_PRM_COMPUTE")
    public class TBicPrmCompute implements Serializable {
        private static final long serialVersionUID = 1L;
        private TBicPrmComputePK id;
        private String cBsnsTyp;
        private String cCmpnyAgtCde;
        private String cSlsCde;
        private String cYl1;
        private String cYl2;
        private Double nMaxInsrntTm;
        private Double nMinInsrntTm;
        private Double nRate;
        private Double nTotalAmt;
    
        public TBicPrmCompute() {
        }
    
    
        @EmbeddedId
        public TBicPrmComputePK getId() {
            return this.id;
        }
    
        public void setId(TBicPrmComputePK id) {
            this.id = id;
        }
        
    
        @Column(name="C_BSNS_TYP")
        public String getCBsnsTyp() {
            return this.cBsnsTyp;
        }
    
        public void setCBsnsTyp(String cBsnsTyp) {
            this.cBsnsTyp = cBsnsTyp;
        }
    
    
        @Column(name="C_CMPNY_AGT_CDE")
        public String getCCmpnyAgtCde() {
            return this.cCmpnyAgtCde;
        }
    
        public void setCCmpnyAgtCde(String cCmpnyAgtCde) {
            this.cCmpnyAgtCde = cCmpnyAgtCde;
        }
    
    
        @Column(name="C_SLS_CDE")
        public String getCSlsCde() {
            return this.cSlsCde;
        }
    
        public void setCSlsCde(String cSlsCde) {
            this.cSlsCde = cSlsCde;
        }
    
    
        @Column(name="C_YL1")
        public String getCYl1() {
            return this.cYl1;
        }
    
        public void setCYl1(String cYl1) {
            this.cYl1 = cYl1;
        }
    
    
        @Column(name="C_YL2")
        public String getCYl2() {
            return this.cYl2;
        }
    
        public void setCYl2(String cYl2) {
            this.cYl2 = cYl2;
        }
    
    
        @Column(name="N_MAX_INSRNT_TM")
        public Double getNMaxInsrntTm() {
            return this.nMaxInsrntTm;
        }
    
        public void setNMaxInsrntTm(Double nMaxInsrntTm) {
            this.nMaxInsrntTm = nMaxInsrntTm;
        }
    
    
        @Column(name="N_MIN_INSRNT_TM")
        public Double getNMinInsrntTm() {
            return this.nMinInsrntTm;
        }
    
        public void setNMinInsrntTm(Double nMinInsrntTm) {
            this.nMinInsrntTm = nMinInsrntTm;
        }
    
    
        @Column(name="N_RATE")
        public Double getNRate() {
            return this.nRate;
        }
    
        public void setNRate(Double nRate) {
            this.nRate = nRate;
        }
    
    
        @Column(name="N_TOTAL_AMT")
        public Double getNTotalAmt() {
            return this.nTotalAmt;
        }
    
        public void setNTotalAmt(Double nTotalAmt) {
            this.nTotalAmt = nTotalAmt;
        }
    
    }
    package com.isoftstone.core.domain;
    
    import java.io.Serializable;
    import javax.persistence.*;
    
    /**
     * The primary key class for the T_BIC_PRM_COMPUTE database table.
     * 
     */
    @Embeddable
    public class TBicPrmComputePK implements Serializable {
        //default serial version id, required for serializable classes.
        private static final long serialVersionUID = 1L;
        private String cProdNo;
        private String cBisCode;
        private String cBicNo;
    
        public TBicPrmComputePK() {
        }
    
        @Column(name="C_PROD_NO")
        public String getCProdNo() {
            return this.cProdNo;
        }
        public void setCProdNo(String cProdNo) {
            this.cProdNo = cProdNo;
        }
    
        @Column(name="C_BIS_CODE")
        public String getCBisCode() {
            return this.cBisCode;
        }
        public void setCBisCode(String cBisCode) {
            this.cBisCode = cBisCode;
        }
    
        @Column(name="C_BIC_NO")
        public String getCBicNo() {
            return this.cBicNo;
        }
        public void setCBicNo(String cBicNo) {
            this.cBicNo = cBicNo;
        }
    
        public boolean equals(Object other) {
            if (this == other) {
                return true;
            }
            if (!(other instanceof TBicPrmComputePK)) {
                return false;
            }
            TBicPrmComputePK castOther = (TBicPrmComputePK)other;
            return 
                this.cProdNo.equals(castOther.cProdNo)
                && this.cBisCode.equals(castOther.cBisCode)
                && this.cBicNo.equals(castOther.cBicNo);
    
        }
        
        public int hashCode() {
            final int prime = 31;
            int hash = 17;
            hash = hash * prime + this.cProdNo.hashCode();
            hash = hash * prime + this.cBisCode.hashCode();
            hash = hash * prime + this.cBicNo.hashCode();
            
            return hash;
        }
    }
     
    关键是查询JPQL的写法费了较久时间
    @NamedQueries( {
         @NamedQuery(name = "findPrmComputeById", query = "select d from TBicPrmCompute d where d.id.CBisCode = ?1 and d.id.CBicNo = ?2 and d.id.CProdNo = ?3")
    } )
     
     
    DAOImpl实现类
         @Transactional
         @Override
         public TBicPrmCompute findPrmComputeById(String cBisCode, String cBicNo, String cProdNo)
                   throws DataAccessException {
              Query query = createNamedQuery("findPrmComputeById", -1, -1, cBisCode, cBicNo, cProdNo);
              return (TBicPrmCompute) query.getSingleResult();
         }
     
     
    调用接口
    TBicPrmCompute tBicPrmCompute = prmComputeDAO.findPrmComputeById(cBisCode, cBicNo, cProdNo);
     
     
    需要注意的是
         @EmbeddedId
         public TBicPrmComputePK getId() {
              return this.id;
         }
     
    一般写JPQL的属性是from EntityA d where d.PropertyGetName
    但是由于联合主键对象需要用来作JPQL的条件,看上面的联合主键ID,比如想拿ID中的A属性作条件,写法是d.id.A=?1
    这里不是get方法的名字呢,直接是属性名字后再是get方法名字getA()去掉get之后的A
  • 相关阅读:
    axure10(原型设计工具)下载地址(包含汉化包和注册机)
    注册微信公众号及微信认证流程
    三款免费实用的本地文件夹同步/备份软件推荐 (SyncToy/FreeFileSync/Compare Advance)
    微信扫码后“滴”音量太大的解决方案
    百度推广针对全局设置“否定关键词”——否定关键词包
    拼多多app怎么退出或切换账号
    响应式网页设计的9条基本原则
    pr导出视频时,提示“此产品的许可已停止工作”的解决方案
    windows内存清理工具——rammap
    图司机编辑器(快速编辑海报)
  • 原文地址:https://www.cnblogs.com/svennee/p/4078842.html
Copyright © 2020-2023  润新知