首页 > 代码库 > JPA联合主键@EmbeddedId使用详解附查询例子
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. * */@Embeddablepublic 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")
} )
@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();
}
@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;
}
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使用详解附查询例子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。