一个数据库表中其主键有可能不止一个属性,同样映射到实体类中,可能有两个或多个属性共同配置成为一个主键,假设一个实体类Score,其主键有两个属性stuId(学生编号)和subjectId(科目编号),在hibernate环境下应该这样配置:

新建一个实体类ScoreId,属性为stuId,和subjectId,该类需要实现serializable接口(最好重写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;}public ScoreId(int stuId, int subjectId) {super();this.stuId = stuId;this.subjectId = subjectId;}}

新建实体类Score:

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;}public Score(ScoreId scoreId, double result) {super();this.scoreId = scoreId;this.result = result;}}

其次是Score.hbm.xml配置文件:

<?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="com.wang.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"></property></class>
</hibernate-mapping>

hibernate.cfg.xml这里就省略了,现在新建一个测试类,用于生成数据库表以及向数据库中存放一条数据:

@Testpublic void testCreateDB(){Configuration cfg = new Configuration().configure();SchemaExport se=new SchemaExport(cfg);//第一个参数是否生成ddl脚本 第二个参数是否执行到数据库se.create(true,true);}@Testpublic void testSave(){Session session = HibernateUtil.getSession();Transaction tx = session.beginTransaction();Score s=new Score(new ScoreId(2,5),88);session.save(s);tx.commit();session.close();}

hibernate笔记--组合主键映射方法相关推荐

  1. Hibernate的复合主键映射

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

  2. 【6.0】组合主键映射

    通过组件来实现组合主键的步骤: 1.编写组合主键的类,该类必须实现Serializable接口,生成对应的get/set方法:最好实现equals和hashCode方法. public class S ...

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

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

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

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

  5. 【吐血整理】Hibernate常用的主键生成策略的原理、优缺点、应用场合

    // 此文由老猫烧须整理,其中加上本人的使用教程,如有误,欢迎指出 // 仅作学习以及备份使用,转载如带有本人整理资料请注明出处 // 欢迎大家留言交流 简介版: increment:代理主键,适合于 ...

  6. Hibernate标识符属性(主键)生成策略全析

    数据库中的主键能够唯一识别一条记录,它可以是一个字段也可以是多个字段的组合.主键的主要作用是标识表中的一条记录,还有和其他表中的数据进行关联.数据库中的主键类型必须符合唯一性约束和非空约束.作为附加属 ...

  7. hibernate框架之主键生成

    一. hibernate 框架中主键的生成策略 (1)native: 表示由设置的方言决定采用什么数据库生成主键方式,根据底层数据库能力选择identity.sequence中的一个. 例如:在MyS ...

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

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

  9. mysql中怎么添加复合主键_mysql添加复合主键的方法

    mysql添加复合主键的方法 发布时间:2020-09-25 10:12:21 来源:亿速云 阅读:90 作者:小新 mysql添加复合主键的方法?这个问题可能是我们日常学习或工作经常见到的.希望通过 ...

  10. oracle删除主键之一,oracle中添加删除主键的方法

    1.创建表的同时创建主键约束 (1)无命名 sql;"> create table student ( studentid int primary key not null,stude ...

最新文章

  1. tomcat 深度优化
  2. UNIX下C语言的图形编程-curses.h函数库
  3. 操作系统安装与优化:chapter8 虚拟机
  4. scala学习---2
  5. Linux系统:常用Linux系统管理命令总结
  6. 模板类的析构函数如何写_如何写财务分析报告?全套财务分析报告模板(含分析方法及流程)...
  7. PAT (Top Level) Practise 1008 Airline Routes(Tarjan模版题)
  8. lucene 搜索学习笔记 - OK
  9. js ul 清缓存_JavaScript使用ul中li标签实现删除效果
  10. python在规划类专业的作用_城乡规划学Python、Gis有哪些具体的作用?
  11. pythongui做计算器_python GUI模拟实现计算器
  12. gcc的ar,nm,objdump,objcopy
  13. cmmi实践访谈测试ppt_CMMI3_实践篇.ppt
  14. USBCAN接口卡打开失败收不到数据常见问题分析
  15. 计算机常用计算单位换算关系,计算机单位换算
  16. CRAY超级计算机发展,Cray推出专为企业设计的Shasta超级计算机
  17. 在唯一密钥属性“fileExtension”设置为“.json”时,无法添加类型为“mimeMap”的重复集合项...
  18. C++学习(一六七)qquick的Scroll、Stack和Swipe区别
  19. Unity3D休闲射击类游戏《Survival Shooter》完整源码
  20. 运营版uniapp多商户商城小程序+H5+APP+商家入驻短视频社区种草直播阶梯拼团

热门文章

  1. MFC的定时器OnTimer
  2. Maven系列--maven-compiler-plugin的使用、Maven之Surefire插件
  3. android的JNI标准 android的NDK
  4. [Canvas]空战游戏进阶 增加己方子弹管理类
  5. 关于寒假作业存在问题的强调
  6. 你不知道的JS(原型)
  7. Java Scanner 类,获取用户输入的值
  8. Codeforces Round #442 (Div. 2) 877E - Danil and a Part-time Job dfs序+线段树
  9. 《FDTD electromagnetic field using MATLAB》读书笔记之一阶、二阶偏导数差商近似
  10. Android 极光推送集成