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 和 ...
随机推荐
- windows2008,命令行远程登录
命令行强制开启3389服务支持server2008和2003 1.C:\Windows\System32\wbem\wmic /namespace:\\root\cimv2\terminalservi ...
- C语言指针解说
指针是C语言的一种数据类型.类似于C中的其它类型,比如int ,char 等.既然指针是一种类型,当我们定义该类型变量.该类型变量就称为指针变量. C中有了指针就有了指向. 指向:指针变量指向本身保存 ...
- Oracle----oracle编程总结
1,SEQUENCE的使用 问题:在MSSQL中,我们可以通过设置自增长来作为主键,但是oracle里面没有这个 解决方案:使用SEQUENCE来实现,具体步骤如下 (1)首先建立一个序列(就是每次查 ...
- 【转】如何彻底删除SVN中的文件和文件夹(附恢复方法)
这里假设SVN项目的目录为 /data/svn/project,我们想排除trunk/test.exe文件和trunk/notallowed/目录,操作步骤如下及执行的svn命令(在svn安装目录的b ...
- 控制器post参数接收
一.post对象 1.后台c# public class TestController : ApiController { [HttpPost] public string SaveData1(Tb_ ...
- java编程:将数组的第一个为最大第二个为最小以此类推
import java.util.Scanner; public class Max_Min { public static void main(String[] args) { int[] a = ...
- 辛星教你高速掌握PHP的正則表達式
首先说一下,这篇文章也是我在看了数个大牛的博客之后总结出来的,因此首先向这些大牛表示崇高的敬意和感谢,因为人数众多.并且来源也是特别分散,就不一一介绍了,见谅. ************跨语言的主题* ...
- zxing 二维码扫描 配置和使用
本文转载至 http://blog.csdn.net/a6472953/article/details/8796501 二维码扫描使用最多的主要有两个库:zbarSDK 和zxing 关于zbar ...
- jqgrid动态添加rowlist
function changePager(){ var pagerCenter =$('#grid-pager_center');//获取td pagerCenter.find('se ...
- inner join和out join的区别
inner join(又叫join) out join包括left join,right join和full join(也就是left+right)