(九)Hibernate 的复合主键
一、什么是复合主键?
- 一张表的主键是由多个字段组成,这个主键就被称为复合主键。 主键是唯一确定某条记录的字段,比如公民的身份证号就是一个主键,因为由身份证号这个主键就可以确定
- 某个公民。 有一种情况,比如学生成绩这张表中,一个学号无法唯一确定这个学生的成绩,因为这个学生有多科成绩,这时候“学号+学科”才是主键,两者结合才能唯一确定一条记录,也就是成绩。
二、hibernate生成含有复合主键表的映射bean
2.1 创建有复合主键的表
这张表有复合主键
2.2 生成映射文件
Hibernate 对含有复合主键的表生成bean的时候会把复合主键作为单独的bean独立生成。
2.3 分析Score和ScoreId bean
2.4 分析总映射文件
三、对有符合主键的bean进行增删改查操作
案例一 Test_CompositeId.java
package action; import java.io.Serializable; import org.hibernate.Session;
import org.hibernate.Transaction; import bean.Score;
import bean.ScoreId;
import util.HibernateUtil; public class Test_CompositeId { public static void main(String[] args) {
// Test_CompositeId.select(); // Test_CompositeId.save(); Test_CompositeId.update();
} /**
* 查找
*/
private static void select() { Session session = null;
Transaction tran = null; ScoreId id = new ScoreId();
id.setUserid(1);
id.setSubject("语文"); try {
session = HibernateUtil.getSessionFactory().getCurrentSession();
tran = session.beginTransaction(); Score score = (Score) session.get(Score.class, id); System.out.println("成绩=" + score.getScore()); tran.commit();
} catch (Exception e) {
e.printStackTrace();
tran.rollback();
} } private static void save() {
Session session = null;
Transaction tran = null; ScoreId id = new ScoreId();
id.setSubject("英语");
id.setUserid(1); Score score = new Score();
score.setId(id);
score.setScore(100); try {
session = HibernateUtil.getSessionFactory().getCurrentSession();
tran = session.beginTransaction(); Serializable primarykey = session.save(score);
System.out.println(primarykey); tran.commit();
} catch (Exception e) {
e.printStackTrace();
tran.rollback();
}
} /**
* 执行更新操作
*/
private static void update() { Session session = null; Transaction tran = null; ScoreId id=new ScoreId();
id.setUserid(1);
id.setSubject("英语"); Score score=new Score();
score.setId(id);
score.setScore(12); try {
session = HibernateUtil.getSessionFactory().getCurrentSession();
tran = session.beginTransaction(); session.update(score); tran.commit();
} catch (Exception e) {
e.printStackTrace();
tran.rollback();
} } }
所有代码在这里 : 链接
(九)Hibernate 的复合主键的更多相关文章
- hibernate中复合主键的使用
转: https://blog.csdn.net/shutingwang/article/details/6627730 https://blog.csdn.net/lmy86263/article/ ...
- Hibernate 表映射 主键生成策略与复合主键
主要分析三点: 一.数据表和Java类的映射 : 二.单一主键映射和主键的生成策略 : 三.复合主键的表映射 : 一.数据表和Java类的映射 Hibernate封装了数据库DDL语句,只需要将数据 ...
- hibernate复合主键
需要用到实体类Role的主键和Menu的主键结合起来作为实体类RoleMenu的主键,那么通过Hibernate具体实现如下: RoleMenu实体类:(注意该实体类需要实现Serializable接 ...
- Hibernate征途(七)之复合主键映射和集合映射
把这两种映射放到一起说,是因为这两种映射不像前面的复用型映射.数量和方向型映射那么分类鲜明,所以放到了这个“其他”里面. 复合主键映射 在关系模型中,复合主键和其他的主键方式没有很大区别,但是反映到对 ...
- Hibernate复合主键映射
目录: 1. 实现方式一:将复合主键对应的属性与实体其他普通属性放在一起 2. 实现方式二:将主键属性提取到一个主键类中,实体类只需包含主键类的一个引用 在日常开发中会遇到这样一种情况,数据库中的某张 ...
- 步步为营Hibernate全攻略(四)剪不断理还乱之:复合主键 && 组合映射
一:复合主键 复合主键即两个或多个字段联合起来作为主键,它的通常做法是将主键相关字段抽取出来放到一个单独的类中,但是这样的类是有要求的: 1. 必须实现序列化接口 2. 必须覆盖e ...
- 【Hibernate步步为营】--复合主键映射具体解释
上篇文章讨论了继承映射,它是对象模型中最主要的特性,对于继承映射它的主要区分是字段类型的不同,所以在生成表结构时须要有新列来标识数据的类型,能够使用<subclass>标签并在标签中加入d ...
- Hibernate第三篇【主配置文件、映射文件、复合主键映射】
前言 目前已经学了如何搭建Hibernate的开发环境,以及Hibernate对应的API了-在快速入门还没讲解的就是配置文件是怎么配置的.因此,本博文主要讲解主配置文件以及映射配置文件.. 主配置文 ...
- Hibernate主配置文件、映射配置文件以及复合主键查询
Hibernate.cfg.xml主配置文件 主配置文件中主要配置:数据库连接信息.其他参数.映射信息! 常用配置查看源码: hibernate-distribution-3.6.0.Final\pr ...
随机推荐
- Flutter移动电商实战 --(47)详细页_Flutter_html插件的使用
详情里面是hemlt和图片组成的,但是flutter是不支持html的所以需要其他插件 flutter webview plugin:这个不太好用 flutter_html:用这个插件 先解决之前一个 ...
- OSError: image file is truncated (28 bytes not processed)
解决办法: 在代码中添加两行 from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES = True
- Linux交换空间(swap space)的那些优缺点
下面的所有例子都在ubuntu-server-x86_64 16.04下执行通过 什么是swap? swap space是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合.简单点说 ...
- 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_10-课程详情页面静态化-课程详情模型数据查询接口
根据课程详情页面写一个获取数据模型的接口 目录的数据来自于课程计划表 右侧是课程的图片 需要写一个接口 获取课程相关的所有信息. 所以就需要一个模型类,里面包含了基本信息.图片信息.等各种详情页面的信 ...
- LeetCode_69. Sqrt(x)
69. Sqrt(x) Easy Implement int sqrt(int x). Compute and return the square root of x, where x is guar ...
- python面向对象之花里胡哨大杂烩
python类的魔法方法之__str__.__repr__.__format__.__module__.__class__.__slots__.__call__.__del__(析构函数) 字符串的内 ...
- antd ——按钮
<ButtonGroup> <Button type="primary" htmlType="submit" onClick={this.ha ...
- CareerCup Questions List 职业杯题目列表
网站 www.careercup.com 上的题库列表 # Title Difficulty Company 1 Guards in a museum Hard F, G 2 Bomberman H ...
- [转载]DriverStore文件夹特别大,能删除吗?
[转载]DriverStore文件夹特别大,能删除吗? 转自博客园https://www.cnblogs.com/lovebing/p/6951833.html 这篇文章,清理完C盘多了20G!不要太 ...
- 创建Webpack 4.X项目
创建基本的webpack4.x项目 运行npm init -y 快速初始化项目 在项目根目录创建src源代码目录和dist产品目录 在 src 目录下创建 index.html 使用 cnpm 安装 ...