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

摘要:
publicTBicPrmComputed(){}@EmbeddedIdpublicTBicPrmComputePKgetId(){returnthis.id;}@Column(name=“C_BSNS_TYP”)publicStringgetCBsnsTyp(){returnthis.cBsnsTyp;}publicvoisetCYl2(StringcYl2){this.cYl2=cYl2;
花了2个小时的时间解决这个问题,网上资料太少,记录下
 
 
详情看源文件TBicPrmCompute,TBicPrmComputePK
JPA联合主键@EmbeddedId使用详解附查询例子第1张JPA联合主键@EmbeddedId使用详解附查询例子第2张
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

免责声明:文章转载自《JPA联合主键@EmbeddedId使用详解附查询例子》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS开发UI篇—CAlayer(创建图层)Access数据库 字段值 字符替换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DB2中Lob is closed. ERRORCODE=4470的解决

使用DB2的Blob类型是,出现一下错误: Lob is closed. ERRORCODE=-4470, SQLSTATE=null;?C:com.ibm.db2.jcc.b.SqlException: [jcc][10120][11936][3.50.152] 操纵无效:已封闭 Lob。 ERRORCODE=-4470, SQLSTATE=null。...

JS点击img图片放大再次点击缩小JS实现 简单实用Ctrl+C+V就可以用

业务需要,从后台获取的图片列表,用img标签展示,用户需要查看大图。记录下来以便学习和参考.示例图如下: 放大之前: 放大之后: 点击后放大(由于图片高度超出了页面,需要通过overflow:auto;设置滚动条,点击放大图片回到列表界面) 附代码(js实现): 1、获取所有img标签,添加展开功能,该方法在图片列表加载完成以后执行: 1...

Repeater的Command操作

Repeater的Command操作 1、ItemCommand事件 :在Repeater中所有能触发事件的控件,都会来触发这一个事件 后台创建:在Page_Load中 Repeater1.ItemCommand += ,然后双击Tab键创建 2、CommandName : 判断点击的是什么按钮, 后台调用:e.CommandName 3、CommandAr...

字符、字符串和文本处理

1.1字符 在.NET Framework中,字符都是用16位Unicode编码(UTF-16)的(编译时用UTF-16编码成2进制存到硬盘,程序运行时再用utf-16解码显示代码中的字符串,在内存中相应的字节流就是用UTF-16编码过的),也就是说所有字符都是占2个字节16位,这简化了国际化应用程序的开发。Unicode字符集有很多种编码方案,常用的有:...

vue前端上传图片并回显,同时获取文件的base64编码

<el-form-item label="部位缩略图:" required> <div class="upload-img" style=" 148px; height: 100px;" > <input type="file" ref="...

拖动的模态框

弹出框,我们也称为模态框。 1.点击弹出层,会弹出模态框, 并且显示灰色半透明的遮挡层。 2.点击关闭按钮,可以关闭模态框,并且同时关闭灰色半透明遮挡层。 3.鼠标放到模态框最上面一行,可以按住鼠标拖拽模态框在页面中移动。 4.鼠标松开,可以停止拖动模态框移动 案例分析: 点击弹出层, 模态框和遮挡层就会显示出来 display:block; 点击关闭按...