花了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

JPA联合主键@EmbeddedId使用详解附查询例子的更多相关文章

  1. JPA联合主键

    联合主键也就是说需要多个字段才能确定数据库记录中的唯一一行.这样就需要多个字段一起,组成主键,也叫联合主键.例如飞机航线,我们需要知道飞机起飞的地点以及飞机降落的地点.所以需要飞机起飞的地点和降落的地 ...

  2. Hibernate入门之主键生成策略详解

    前言 上一节我们讲解了Hibernate命名策略,从本节我们开始陆续讲解属性.关系等映射,本节我们来讲讲主键的生成策略. 主键生成策略 JPA规范支持4种不同的主键生成策略(AUTO.IDENTITY ...

  3. Hibernate主键生成策略详解

    转载自:http://blog.csdn.net/wanghuan203/article/details/7562395 hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定 ...

  4. Java 序列化Serializable详解(附详细例子)

    Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是 ...

  5. JPA学习---第十二节:JPA中的联合主键

    1.定义实体类,代码如下: (1).将联合主键放到一个类中,代码如下: package learn.jpa.entity; import java.io.Serializable; import ja ...

  6. JPA 系列教程13-复合主键-@EmbeddedId+@Embeddable

    复合主键 指多个主键联合形成一个主键组合 需求产生 比如航线一般是由出发地及目的地确定,如果要确定唯一的航线就可以用出发地和目的地一起来表示 ddl语句 同复合主键-2个@Id和复合主键-2个@Id+ ...

  7. JPA注解实现联合主键

    当表中一个主键不能唯一标识一条记录的时候,就需要使用联合主键了,下面是使用JPA注解实现联合主键的代码 1 首先需要建立一个复合主键类,用来存放需要生产联合主键的属性,该类需要实现序列化. packa ...

  8. hibernate 注解 联合主键映射

    联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将 该类注解 ...

  9. Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...

随机推荐

  1. C++string类常用函数

    C++string类常用函数 string类的构造函数:string(const char *s);    //用c字符串s初始化string(int n,char c);     //用n个字符c初 ...

  2. 7、Django实战第7天:用form实现登录

    Django提供了form对表单进行验证,比如今天要完成的限定登录的时候用户名和密码不能为空,通过这个操作,数据进入到数据库查询之前,我们就可以过滤很多错误,避免不必要的查询. 在users目录下新建 ...

  3. mysql使用default来设置字段的默认值

    mysql创建表时,我们可以使用default来设置表字段的默认值,这样当向表中插入或添加数据时,如果没有为此字段设置任何值,则使用default默认值来填充该字段的值 在使用create table ...

  4. 小白的Python之路 day5 os,sys模块详解

    os模块详解 1.作用: 提供对操作系统调用的接口 2.常用方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname" ...

  5. [CF911A]Nearest Minimums

    题目大意: 给你一个数列,问数列中最小数的最近距离. 思路: 直接模拟即可. #include<cstdio> #include<cctype> #include<alg ...

  6. apk打包

    1.在导航栏中选择Builder->Generate Signed Apk 2.新建点击Creat new... 3.注意路径后面写apk的名字(这个名字将会显示在手机软件的下方)

  7. JavaScript的=、==和===

    (1) 百度知道上的解释: = 为对象赋值 == 表示两个对象toString值相等 === 表示两个对象类型相同且值相等 (2)  知乎上的解释: 绝大多数场合应该使用 === ,只有检测 null ...

  8. 关于在.NET中 DAL+IDAL+Model+BLL+Web

    其实三层架构是一个程序最基本的 在.Net开发中通常是多层开发比如说    BLL 就是business Logic laywer(业务逻辑层) 他只负责向数据提供者也就是DAL调用数据 然后传递给 ...

  9. What's New In DevTools (Chrome 59)来看看最新Chrome 59的开发者工具又有哪些新功能

    原文:https://developers.google.com/web/updates/2017/04/devtools-release-notes#command-menu 参考:https:// ...

  10. Kubernetes用户指南(四)--应用检查和调试

    一.调试 当你的应用开始运行,那么DEBUG是不可避免的问题. 早些时候,我们在描述的是如何通过kubectl get pods来获得Pod的简单状态信息. 但是现在,这里有更多的方式来获得关于你的应 ...