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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值