通过组件来实现组合主键的步骤:

1.编写组合主键的类,该类必须实现Serializable接口,生成对应的get/set方法;最好实现equals和hashCode方法.

public class ScoreId implements Serializable{private int stuId;//学生编号private int subjectId;//科目编号public int getStuId() {return stuId;}public void setStuId(int stuId) {this.stuId = stuId;}public int getSubjectId() {return subjectId;}public void setSubjectId(int subjectId) {this.subjectId = subjectId;}
}

2.在主类中引用对应组件

/*** 成绩* */
public class Score {private ScoreId scoreId;private double result;//成绩public ScoreId getScoreId() {return scoreId;}public void setScoreId(ScoreId scoreId) {this.scoreId = scoreId;}public double getResult() {return result;}public void setResult(double result) {this.result = result;}
}

 

3.映射文件的编写

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.siggy.pojo"><class name="Score"><!-- 组合主键 --><composite-id name="scoreId" class="ScoreId"><key-property name="stuId"></key-property><key-property name="subjectId"></key-property></composite-id><property name="result"/></class>
</hibernate-mapping>

  

4.测试代码【运行该方法:public void testSave() throws HibernateException{}】

package cn.siggy.test;import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;import cn.siggy.pojo.Score;
import cn.siggy.pojo.ScoreId;
import cn.siggy.util.HibernateUtil;public class HibernateTest {@Testpublic void testCreateDB(){Configuration cfg = new Configuration().configure();SchemaExport se = new SchemaExport(cfg);//第一个参数 是否生成ddl脚本  第二个参数  是否执行到数据库中se.create(true, true);}@Testpublic void testSave() throws HibernateException{Session session = null;Transaction tx = null;try{session = HibernateUtil.getSession();tx = session.beginTransaction();Score s = new Score();ScoreId sid = new ScoreId();sid.setStuId(2);sid.setSubjectId(6);s.setResult(89);s.setScoreId(sid);session.save(s);tx.commit();}catch (HibernateException e) {if(tx!=null)tx.rollback();e.printStackTrace();throw e;}finally{HibernateUtil.closeSession();}}
}

  

5.测试结果

控制台信息:


数据库表变化:

转载于:https://www.cnblogs.com/chxbar/p/6675849.html

【6.0】组合主键映射相关推荐

  1. JPA映射组合主键时错误:No default constructor for entity

    我们在使用JPA对历史问题处理时,会涉及到组合主键的处理.处理的思路如下: 使用@Embeddabel定义一个组合组键ID ID实现SErializable接口 声明一个protected的构造方法 ...

  2. Hibernate的复合主键映射

    1>.学过hibernate的都知道用<id>来配置主键生成策略,显然,它只能配置主键是单列的表,对于联合主键的情况<id>就无能为力了.今天翻到个复合主键映射的资料,觉 ...

  3. NHibernate Mapping Attribute实现复合主键映射

    当我在学习使用NHibernate Mapping Attribute的时候,遇到复合主键映射问题,查询了很多资料,也向朋友请教过,由于相关资料不多,中间走了些弯路,好在最终较好解决了,现记录分享如下 ...

  4. Hibenate主键映射和Hibernate常用的标示生成器

    l  Hibenate主键映射 自然主键:充当主键的字段具有一定的含义,是构成记录的组成部分. 代理主键:充当主键的字段本身没有什么含义 Hibernate常用的标示生成器 标示生成器名称 描述 As ...

  5. 添加mysql组合主键_mysql怎么添加复合主键?

    在mysql中可以在创建表时添加复合主键,其语法规则是"PRIMARY KEY [字段1,字段2,-,字段n]",表示主键由多个字段联合组成. 主键约束即在表中定义一个主键来唯一确 ...

  6. 在一表中设置组合主键(两个字段组合成一个主键)

    首先一个表是不能有两个主键的.但是可以有两个字段组合成一个主键,这就是为什么有时候表里为什么会有两个字段都有主键的标志,那是因为他们组合成了一个主键了.          我们可以先删除了原来的主键再 ...

  7. java联合主键_hibernate联合主键映射(注解版)

    1.联合主键的映射三种写法 实体类: package com.zhouwei.po; import javax.persistence.Entity; import javax.persistence ...

  8. 关于mybatis的association和collection主键映射问题

    多对一:association 第一种方式 嵌套方式: 基本数据 Mapper接口,因为简写,就没有写另一个mapper了,写在一个里面,如果要写另一个mapper里面,引用的时候,从名称空间来引用 ...

  9. Hibernate复合主键映射

    目录: 1. 实现方式一:将复合主键对应的属性与实体其他普通属性放在一起 2. 实现方式二:将主键属性提取到一个主键类中,实体类只需包含主键类的一个引用 在日常开发中会遇到这样一种情况,数据库中的某张 ...

最新文章

  1. Keepalived+LVS+Nginx+DRBD+Heartbeat+Zabbix集群架构
  2. php参数一个字符串数组,PHP字符串控制台参数到数组
  3. #include algorithm 常用函数
  4. PHP学习方向-进阶2(三)
  5. pointnet与pointnet++
  6. 《跟我学java》_《跟我学Java——基础篇02》
  7. PHP 循环删除无限分类子节点
  8. 前端学习(610):js执行过程
  9. linux netstat服务,linux netstat查看服务和端口状态
  10. 12123两小时没付款怎么办_机械厂上班的男朋友,一天十小时,周末不休,没时间陪我怎么办?...
  11. 员工评价系统 winform
  12. 2020前端最新面试题(vue篇)
  13. PyTorch系列入门到精通——autograd与逻辑回归
  14. VM Workstation 虚拟机安装Ghost XP教程
  15. WebService cxf简单入门附视频教程
  16. Shell脚本学习指南(一)——入门
  17. 经典语录(个人喜欢)
  18. mysql 查询dual报错_MYSQL基础02(查询)
  19. 测试VPS服务器脚本,一检测VPS网络速度,硬盘性能等
  20. 领导者必备的13个管理套路,用好了,下属死心塌地为你卖命

热门文章

  1. Node.js nrm
  2. torch.nn与torch.nn.functional
  3. PythonEggs
  4. 16 The Terminal and Job Control
  5. pycharm的项目文件中包括什么_婚庆策划是什么?婚庆策划都包括哪些项目
  6. debian9.4网络配置及永久静态默认路由
  7. 实现裸金属服务器的安全微分段
  8. php/eq,thinkphp中eq标签的使用
  9. lwip路由实现_TCP超时与重传《LwIP协议栈源码详解——TCP/IP协议的实现》
  10. linux php7 yum 卸载,Linux_在Centos中yum安装和卸载软件的使用方法,安装一个软件时 yum -y install h - phpStudy...