zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    JavaScript constructor prototyoe
    bootstrap固定响应式导航
    跨浏览器事件处理程序
    原生JS实现字符串分割
    关于css里的class和id
    js动态创建表格方法
    关于css的默认宽度
    js字符串大小写转换
    C++类的一个重要成员:静态成员(二)——静态成员的定义
    C++ 类的一个重要成员:静态成员(一)
  • 原文地址:https://www.cnblogs.com/svennee/p/4078842.html
Copyright © 2011-2022 走看看