Hibernate Student_Course_Score设计
示例:
设计代码,实现在数据库中建student表、course表、和score表,展现三者关系
student表:id、name
course表:id、name
score表:id、score、student_id、course_id
三张表的关联关系如下:
设计思路:
1.首先创建Student实体类和Course实体类
会自动创建中间表,通过@JoinTable注解,设置中间表名为“score”,属性名分别为“student_id”和“course_id”
@ManyToMany
@JoinTable(name="score",
joinColumns={@JoinColumn(name="student_id")},
inverseJoinColumns={@JoinColumn(name="course_id")})
2.创建实体类Score
private int id;
private int score;
private Student student;
private Course course;
根据步骤1中创建的中间表,通过@Table注解设置表名为“score”,
通过@ManyToOne注解设置属性名分别为“student_id”和“course_id”
3.Junit测试类
@Test
public void test() {
new SchemaExport(new Configuration().configure()).create(true, true);
}
具体实现代码如下:
1.Student类
@Entity
public class Student {
private int id;
private String name; private Set<Course> courses = new HashSet<Course>(); @Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} @ManyToMany
@JoinTable(name="score", //中间表名
joinColumns={@JoinColumn(name="student_id")}, //属性名
inverseJoinColumns={@JoinColumn(name="course_id")}) //属性名
public Set<Course> getCourses() {
return courses;
}
public void setCourses(Set<Course> courses) {
this.courses = courses;
}
}
2.Course类
@Entity
public class Course {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3.Score类
@Entity
@Table(name="score") //对应中间表名
public class Score {
private int id;
private int score;
private Student student;
private Course course;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
} @ManyToOne
@JoinColumn(name="student_id") //对应属性名
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
@ManyToOne()
@JoinColumn(name="course_id") //对应属性名
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
}
4.存储一条数据
@Test
public void testsave() { Session session = sf.getCurrentSession();
session.beginTransaction(); Student s = new Student();
s.setName("lisi"); Course c = new Course();
c.setName("c++"); Score score = new Score();
score.setStudent(s);
score.setCourse(c);
// score.setScore(90); //若不设置,默认为0 session.save(s);
session.save(c);
session.save(score); session.getTransaction().commit();
}
注意:
create table score (id integer not null, score integer not null, course_id integer, student_id integer not null auto_increment, primary key (student_id, course_id)) 运行程序,会发现通过程序自动建的score表是有问题的。 我们想要的是,id为主键,且自增 而结果是,student_id和course_id为联合主键,且student_id自增 这是hibernate自身的bug,所以应该手动去数据库中,修改表的结构
Hibernate Student_Course_Score设计的更多相关文章
- 深入浅出Struts2+Spring+Hibernate框架
一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司 ...
- JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册
写在最前: 下午有招聘会,不想去,总觉得没有准备好,而且都是一些不对口的公司,可是又静不下心来,就来写个博客. 最近在仿造一个书城的网站:http://www.yousuu.com ,UI直接拿来用, ...
- Hibernate框架(未完待续······)
作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编 ...
- Hibernate学习笔记整理系列-------一、Hibernate简介
Hibernate的官网:http://hibernate.org/ 1.1 Hibernate框架的作用 Hibernate框架是一个数据访问框架(也叫持久层框架,可将实体对象变成持久对象).通过H ...
- Hibernate常用接口
Hibernate的接口类型 在了解了Hibernate的基本配置,映射文件后,道路已经铺平了.我们继续往前走.接下来,我们应该做的是了解Hibernate常用的接口,对Hibernate的工作方式进 ...
- Hibernate框架(一)——总体介绍
作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编写重复的 ...
- Hibernate第七篇【对象状态、一级缓存】
前言 本博文主要讲解Hibernate的细节-->对象的状态和一级缓存- 对象状态 Hibernate中对象的状态: - 临时/瞬时状态 - 持久化状态 - 游离状态 学习Hibernate的对 ...
- Hibernate【缓存】知识要点
对象状态 Hibernate中对象的状态: 临时/瞬时状态 持久化状态 游离状态 学习Hibernate的对象状态是为了更清晰地知道Hibernate的设计思想,以及是一级缓存的基础...当然啦,也就 ...
- Spring4.x Jpa + hibernate的配置(废弃JpaTemplate)
近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 ...
随机推荐
- ASP.NET MVC 表单提交多层子级实体集合数据到控制器中
于遇到了项目中实体类嵌套多层子级实体集合,并且子级实体集合的数据需要提交保存到数据库中的问题.针对此情况需要进行一些特殊的处理才可以将整个 实体类及子级实体集合数据提交表单到控制器中,解决的方法是根据 ...
- linux 免密登录
ssh-keygen -t rsa -P "" ssh-copy-id -i ~/.ssh/id_rsa.pub root@服务器地址
- jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、
脚 本 之 家 www.jb51.net 脚本云 专题 素材下载 电子书 软件下载 源码下载 服务器常用软件 a5交易 首页 网页制作 脚本专栏 脚本下载 网络编程 数据库 CMS教程 电子书籍 平面 ...
- iOS --转载2018苹果$299美元企业级开发者账号申请攻略
前言篇 现在苹果企业级开发者账号申请十分严格,大部分企业都无法申请下来,本人尝试过多次申请,现将一些审核技巧分享出来,希望能帮到你们通过申请,需要帮助请看本文最后 2018年6月7号申请成功案例 ...
- Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)
Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权) 问题分析:数据库还原的时候还有其他进程连在上面,导致无法获得独占造成的. 解决方案: 一.切断连接进程 .查询要还原的数据 ...
- python3 - 闭包
# 定义一个函数def test(number): # 在函数内部再定义一个函数,并且这个函数用到外边函数的变量, # 那么将这个函数以及用到的一些变量称之为 闭包. def text_in(numb ...
- 实现 iPhone 电子书的分页显示功能的代码
本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6650497 原文地址:实现 iPhone 电子书的分页显示功能的代码作者:醉吻 ...
- 《从零开始学Swift》学习笔记(Day 36)——静态方法
原创文章,欢迎转载.转载请注明:关东升的博客 静态方法与静态属性类似,Swift中定义了静态方法,也称为类型方法.静态方法的定义与静态属性类似,枚举和结构体的静态方法使用的关键字是static:类静态 ...
- VS2012如何显示行号
Tools-Options-Text Editor-All Languages –General – Display
- JS HTML DOM 事件对象(onclick、onmouseenter)
HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序. 事件通常与函数结合使用,函数不会在事件发生前被执行! (如用户点击按钮). HTML DOM 事件 DOM: ...