Java持久性API(JPA)第5讲——关系建立

目标:建立实体类之间的关系来体现数据库中实体之间的关联关系。
主要内容:
n 创建数据库表
n 添加测试数据
n 生成实体类
n 关系分析
n 主键类
1、实例说明
本实例模拟简单学生成绩管理系统,为了使用说明一对一的关系,每个学生对一个一台电脑。涉及的实体有:学生、电脑、课程、成绩。具体信息参考《创建数据库表》部分。
涉及的关系如下:
n 每个电脑属于一个学生;
n 学生和课程之间是多对多的关系;
n 学生和成绩之间是一对多的关系;
n 课程和成绩之间是一对多的关系。
2、创建数据库表
数据库表的定义语句如下:
create table student
(
s_id char(10) not null,
s_name char(10) not null,
s_birthday date,
primary key(s_id)
);
create table computer
(
c_id char(10) not null,
s_id char(10),
c_price float,
primary key(s_id),
foreign key(s_id) references student(s_id)
);
create table course
(
c_id char(8) not null,
c_name varchar(50) not null,
primary key(c_id)
);
create table score
(
s_id char(10) not null,
c_id char(8) not null,
grade float,
primary key(s_id,C_id),
foreign key(s_id) references student(s_id),
foreign key(c_id) references course(c_id)
);
3、添加测试数据
添加测试数据的SQL语句如下:
insert into student values
(
'0511370101',
'张小菲',
'1987-03-04'
);
insert into student values
(
'0511370104',
'刘慧',
'1988-11-04'
);
insert into student values
(
'0511370102',
'付方',
'1988-9-9'
);
insert into student values
(
'0511370103',
'郭好',
'1987-6-5'
);
insert into computer values
(
'cp001',
'0511370101',
8500
);
insert into computer values
(
'cp002',
'0511370102',
8600
);
insert into computer values
(
'cp003',
'0511370103',
8400
);
insert into computer values
(
'cp004',
'0511370104',
8700
);
insert into course values
(
'JK0301',
'Java Web开发'
);
insert into course values
(
'JK0302',
'Java EE'
);
insert into course values
(
'JK0401',
'.NET'
);
insert into course values
(
'JK0402',
'C#语言'
);
insert into score VALUES(
'0511370101','JK0301',70
);
insert into score VALUES(
'0511370101','JK0302',71
);
insert into score VALUES(
'0511370101','JK0401',72
);
insert into score VALUES(
'0511370101','JK0402',73
);
insert into score VALUES(
'0511370103','JK0301',90
);
insert into score VALUES(
'0511370103','JK0302',91
);
insert into score VALUES(
'0511370103','JK0401',92
);
insert into score VALUES(
'0511370103','JK0402',93
);
insert into score VALUES(
'0511370104','JK0301',80
);
insert into score VALUES(
'0511370104','JK0302',81
);
insert into score VALUES(
'0511370104','JK0401',82
);
insert into score VALUES(
'0511370104','JK0402',83
);
4、使用向导生成持久单元
和第1讲中的过程相同。
5、使用向导生成实体类
和第1讲中的过程相同。
6、关系分析
1)一对一的关系
学生和电脑之间的关系是一对一的关系
在Student类中有如下表示关系的代码:
@OneToOne(cascade = CascadeType.ALL, mappedBy = "student")
private Computer computer;
在Computer类中有如下表示关系的代码:
@JoinColumn(name = "s_id", referencedColumnName = "s_id", insertable = false, updatable = false)
@OneToOne
private Student student;
2)一对多的关系
学生和成绩之间是一对多的关系。
在Student类中有如下表示关系的代码:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "student")
private Collection<Score> scoreCollection;
3)多对一的关系
成绩和学生之间的关系是多对一的关系。
在成绩类中有如下表示关系的代码:
@JoinColumn(name = "s_id", referencedColumnName = "s_id", insertable = false, updatable = false)
@ManyToOne
private Student student;
7、主键类
在成绩表中,学生学号和课程号组成联合主键。在创建实体类的时候需要一个主键类来标识这个实体。
主键类的代码如下:
/*
* ScorePK.java
*
* Created on 2007年5月30日, 上午1:11
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package jpa;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
/**
* Primary Key class ScorePK for entity class Score
*
* @author Administrator
*/
@Embeddable
public class ScorePK implements Serializable {
@Column(name = "s_id", nullable = false)
private String sId;
@Column(name = "c_id", nullable = false)
private String cId;
/** Creates a new instance of ScorePK */
public ScorePK() {
}
/**
* Creates a new instance of ScorePK with the specified values.
* @param cId the cId of the ScorePK
* @param sId the sId of the ScorePK
*/
public ScorePK(String cId, String sId) {
this.cId = cId;
this.sId = sId;
}
/**
* Gets the sId of this ScorePK.
* @return the sId
*/
public String getSId() {
return this.sId;
}
/**
* Sets the sId of this ScorePK to the specified value.
* @param sId the new sId
*/
public void setSId(String sId) {
this.sId = sId;
}
/**
* Gets the cId of this ScorePK.
* @return the cId
*/
public String getCId() {
return this.cId;
}
/**
* Sets the cId of this ScorePK to the specified value.
* @param cId the new cId
*/
public void setCId(String cId) {
this.cId = cId;
}
/**
* Returns a hash code value for the object.This implementation computes
* a hash code value based on the id fields in this object.
* @return a hash code value for this object.
*/
@Override
public int hashCode() {
int hash = 0;
hash += (this.cId != null ? this.cId.hashCode() : 0);
hash += (this.sId != null ? this.sId.hashCode() : 0);
return hash;
}
/**
* Determines whether another object is equal to this ScorePK.The result is
* <code>true</code> if and only if the argument is not null and is a ScorePK object that
* has the same id field values as this object.
* @param object the reference object with which to compare
* @return <code>true</code> if this object is the same as the argument;
* <code>false</code> otherwise.
*/
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof ScorePK)) {
return false;
}
ScorePK other = (ScorePK)object;
if (this.cId != other.cId && (this.cId == null || !this.cId.equals(other.cId)))
return false;
if (this.sId != other.sId && (this.sId == null || !this.sId.equals(other.sId)))
return false;
return true;
}
/**
* Returns a string representation of the object.This implementation constructs
* that representation based on the id fields.
* @return a string representation of the object.
*/
@Override
public String toString() {
return "jpa.ScorePK[cId=" + cId + ", sId=" + sId + "]";
}
}
JavaFX Stage JavaFXStagejavafx.stage.Stage表示 JavaFX 桌面应用程序中的窗口。在 JavaFX 内部,Stage您可以插入一个 JavaFX Scene,它表示在窗口内显示的内容 - 在Stage.当 JavaFX 应用程序启动时,它会创建一个根Stage对象,该对象将传递给 start(Stage primaryStage)JavaFX 应用程序的根类的方法。此Stage 对象代表 JavaFX 应用程序的主窗口。 阅读详情

相关推荐

2017阿里内推笔试题--算法工程师(运筹优化)

2017阿里内推笔试题–算法工程师(运筹优化)题目沐哲是一个菜鸟仓库的一个拣货员,但他有非常个怪异的习惯。每次拣货的重量都要比之前拣的一个轻,每次拣到货后都可以得到1块钱,沐哲想知道这样最多能赚多少钱 32 34 7 33 21 2 13 12 3 11 26 36 16 30 22 1 24 14 20 23 25 5 19 29 27 15 9 17 31 4 6 18 8 10 3

shawpan的专栏 1万+

Spring JPA多对多关系表两种生成方式

第一种关系表只有两列多对多主键。ManyToMany默认两边互相配置,JoinTable注解直接添加关联表名称。这种方式将默认生成关联表,只有两个实体表的主键两列。 第二种关系表除了两列多对多主键还包含其他属性。思路是将ManyToMany拆分成为两个OneToMany。首先显示创建关系对象,生成自增主键,并定义若干关系表的属性。然后两个实体表分别OneToMany关联到关系表。   ref...

weixin_42926060的博客 2121

PPL文档——Excel制作的甘特图加上动态今日线

当很多项目需要跟踪进度时,我们介绍一种在Excel中创建甘特图。

qq_34777858的博客 7066

Spring Data Jpa 多表之间的关系和操作多表的步骤(一对多)

Spring Data Jpa 多表之间的关系和操作多表的步骤 表关系 一对一 一对多: 一的一方:主表 多的一方:从表 外键:需要再从表上新建一列作为外键,他的取值来源于主表的主键 多对多 中间表:中间表中最少应该由两个字段组成,这两个字段做为外键指向两张表的主键,又组成了联合主键 实体类中的关系 4. 包含关系:可以通过实体类中的包含关系描述表关系 5. 继承关系 分析步骤 6. 明确表关系 7. 确定表关系(描述 外键 | 中间表) 8. 编写实体类,再实体类中描述表关系(包含关系) 9. 配置

恶魔盒子 906

数字蓝牙功放

数字蓝牙功放(TPA3110+BK8000L),基于D类数字功放芯片TPA3116蓝牙功放,HIFI级带滤波15Wx2蓝牙数字功放,支持有线和蓝牙两种音源输入

runweipa的博客 1420

安装keil5(MDK)及导入pack包教程

首先说明的是我安装的Keil版本为Keil V5.29.0.0 1、安装软件 右键管理员权限运行安装包 设置安装路径以及pack的存放路径 随意输入First Name和E-mail 安装驱动 完成软件安装,然后可以先关闭弹出的Pack Install(一会再添加) 2、激活一下软件 打开桌面的Keil File → License Management(我之前注册过了) 右...

hrx-@@ 10万+

JPA表间关系(多对多,一对多,多对一)

**AccountEntity:用户 RoleEntity:角色 Permission: 权限 一个用户只能有一个角色,而一个角色可以属于多个用户, 一个角色拥有多个权限,一个权限也可以被多个角色拥有 ** OneToMany(此时的角色就为一对多),在多的一方中加入少的一方的Set集合。targetEntity 为关联的实体类。JoinColumn可减少中间表的生成,account_role_id为待会儿会在少的一方(AccountEntity)中生成的角色Id字段,referencedColumnNa

wflsyf的博客 1513

单卡也能玩转Qwen2.5-VL微调!3090实测Grounding任务调参技巧大全

本文详细介绍了如何在单张RTX 3090显卡上,通过梯度累积、BF16混合精度训练、梯度检查点等关键技术,成功微调Qwen2.5-VL多模态大模型以完成Grounding视觉定位任务。文章提供了从数据处理、参数配置到训练监控的完整实战调参技巧,为资源有限的开发者提供了可行的解决方案。

weixin_29098117的博客 425

Java持久性API(JPA)第1讲——简单实例

 目标:使用Java持久性API把数据库中的数据显示出来。基本过程包括:u       加载驱动程序u       创建数据库以及表u       在NetBeans中加载驱动程序u       在NetBeans中创建连接u       创建持久单元以及实体类u       创建访问持久单元的会话Beanu       创建Servlet客户端程序,访问会话B

李绪成的一亩三分地 4389

实现高精度卷积混响--MATLAB仿真篇

一、前言 之前在STM32F407上现实了直播声卡,实现的经典Schroeder混响模型和Moorer混响模型,得到不错效果。后来得知卷积混响最为真实地表现空间的特性,所以也就尝试在MCU上实现一个高精度的卷积混响(卷积点数为32768),目前MCU出来的混响效果算得上一流水准,本人也在计划在ADI的21489或者SC584上更高精度的卷积混响。 二、卷积方式 1、conv1是使用MATLAB自带卷积函数conv 2、conv2和conv3是改进后卷积过程,具有减少运算量特点,方便嵌入式移植 clear;

Six44的博客 5082

基于YOLO26深度学习框架的智能停车场管理系统的算法研究实现方法

本文研究了基于YOLO26深度学习框架的智能停车场管理系统实现方法。系统采用CSPDarknet53作为主干网络,结合特征金字塔和注意力机制提升检测性能。通过数据预处理、模型训练和停车分析三个主要模块,实现了车位占用检测、车辆类型识别等功能。实验结果表明,该方法在检测精度和速度方面表现优异,为智能停车场管理提供了有效的技术解决方案。

一键难忘的博客 571

什么是JPA?Java Persistence API简介

作为规范,Java Persistence API关注持久性,它将Java对象的创建过程和具体的创建形式解耦。并非所有Java对象都需要持久化,但大多数应用程序都会保留关键业务对象。JPA规范允许您定义应该保留哪些对象,以及如何在Java应用程序中保留这些对象。 JPA本身不是一个工具或框架; 相反,它定义了一组可以由任何工具或框架实现的概念。虽然JPA的对象关系映射(ORM)模型最初基于Hibe...

Java_fenxiang的博客 1820

Windows11搭建GPU版本PyTorch 开发环境教程

Windows11搭建GPU版本PyTorch环境详细过程

世界那么大,我想去看看~【随心更新,看世界去了😄】 3236

jpa和hibernate_JPA和Hibernate的Java持久性,第2部分:多对多关系

jpa和hibernate 本教程的前半部分介绍了Java Persistence API的基础知识,并向您展示了如何使用Hibernate 5.3.6和Java 8配置JPA应用程序。如果您已阅读该教程并研究了其示例应用程序,那么您将了解在JPA中建模JPA实体和多对一关系。 您还进行了一些使用JPA查询语言(JPQL)编写命名查询的练习。 在本教程的后半部分,我们将更深入地介绍JPA和H...

cxu0262的博客 187

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java持久性API(The Java Persistence API)-一个简单的实体持久性编程模型

 Java持久性API(The Java Persistence API)-一个简单的实体持久性编程模型 原文连接:http://java.sun.com/developer/technicalArticles/J2EE/jpa/文章索引Java平台企业版(Java EE)第五版本最重要的主题是易于开发。贯穿整个平台的改变使开发企业Java应用程序变得更简单,需要少的多的代码。值得

龙行天下的专栏 1479

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

使用EJB3 Java Persistence API标准化Java持久性

持久性对于大多数企业应用程序都非常关键,因为它们需要访问关系数据库(例如Oracle Database 10g)。如果您正在使用Java开发应用程序,您可能需要完成一些常规任务(例如数据库更新和检索),这是通过编写JDBC和SQL来完成的。最近几年,几种对象关系(O-R)映射框架(例如Oracle TopLink、JBoss Hibernate和BEA Kodo)开始流行,因为它们简化了持久性问题

yzhjisji的专栏 651

什么是JPA?Java Persistence API简介(1)

";清单2中的代码是相当自我记录的。该对象可以来自任何地方(前端提交,外部服务等),并设置其ID和name字段。然后,对象上的字段用于提供SQLinsert语句的值。该类是JDBC的一部分,提供了一种将值安全地应用于SQL查询的方法。虽然JDBC允许手动配置附带的控件,但与JPA相比,它很麻烦。要修改数据库,首先需要创建一个SQL查询,该查询从Java对象映射到关系数据库中的表。然后,只要对象签名发生更改,就必须修改SQL。使用JDBC,维护SQL本身就成了一项任务。JPA的数据持久性。

Y1567409的博客 1113

jpa是什么api_什么是JPA? Java Persistence API简介

jpa是什么api 作为规范, Java Persistence API与persistence有关,它宽松地表示Java对象在创建它们的应用程序进程中不存在的任何机制。 并非所有Java对象都需要保留,但是大多数应用程序都可以保留关键业务对象。 JPA规范使您可以定义应保留哪些对象,以及如何在Java应用程序中保留这些对象。 JPA本身不是工具或框架; 相反,它定义了可以由任何工具或框架实...

cxu0262的博客 632

jpa query 取数组第一个_什么是JPA?Java Persistence API简介

Java ORM标准,用于在关系数据库中存储,访问和管理Java对象Java持久性系列什么是JPA?Java入门...什么是JDBC?Java入门...Java持久性与JPA和...Java持久性与JPA和...JPA和...中的继承关系显示更多作为规范,Java Persistence API与persistence有关,它宽松地表示Java对象在创建它们的应用程序进程中不存在的任何机制。并非所...

weixin_39875805的博客 357
上一篇: NetBeans中的几个快捷方式
下一篇: Java持久性API(JPA)第6讲——关系操作
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值