本示例主要以学生(T_Student)和课程(T_Course)之间的多对多关系,中间表Score(分数),学生表和课程表是多对多关系,另外为他们的关系添加额外的字段---分数:

T_Student类如下:

package server.com.upc.test;

import java.util.HashMap;

import java.util.HashSet;

import java.util.Map;

import java.util.Set;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.ManyToMany;

import javax.persistence.MapKey;

@Entity

public class T_Student {

 private int  id;

 private String name;

 private Map<String,T_Crouse>  course=new HashMap<String,T_Crouse>();

 /*

  * 或者

  * private Set<T_Crouse>  course=new HashSet<T_Crouse>();

  * 

  * */

 @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")

   )

   *

   */

 @ManyToMany

 @MapKey(name="id")

 @JoinTable(

   name="score",

   joinColumns=@JoinColumn(name="student_id"),

   inverseJoinColumns=@JoinColumn(name="course_id")

   )

 public Map<String, T_Crouse> getCourse() {

  return course;

 }

 public void setCourse(Map<String, T_Crouse> course) {

  this.course = course;

 }

 

}

T_course类:

package server.com.upc.test;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

@Entity

public class T_Crouse {

 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;

 }

 

}

中间表Score也写成实体类:

package server.com.upc.test;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToOne;

@Entity

@Table(name="score")

public class T_Score {

 private int  id;

 private int  scrores;

 private T_Student student;

 private T_Crouse  course;

 

 @Id

 @GeneratedValue

 public int getId() {

  return id;

 }

 public int getScrores() {

  return scrores;

 }

 public void setScrores(int scrores) {

  this.scrores = scrores;

 }

 public void setId(int id) {

  this.id = id;

 }

@ManyToOne

 @JoinColumn(name="student_id")

 public T_Student getStudent() {

  return student;

 }

public void setStudent(T_Student student) {

  this.student = student;

 }

 @ManyToOne

 @JoinColumn(name="course_id")

 public T_Crouse getCourse() {

  return course;

 }

public void setCourse(T_Crouse course) {

  this.course = course;

 }

 

}

注意的是中间表中的导航关系manytomany  @JoinColumn(name="course_id");@JoinColumn(name="course_id")中声明的course_id,student_id和T_student表中声明的要一致,不然会产生其他的字段--再就是中间表的@Table(name="score")score名字和T_Student中的 @JoinTable(

name="score",要一样!!!

建立好之后就会生成中间表含有字段id,student_id,course_id,和score四个字段(然后hibernate生成的主键是(student_id,coure_id))虽然你在T_Score表中声明了自己的id。。。。这是值得注意的地方!

hibernate annotation多对多中间表添加其他字段的第三种方法的更多相关文章

  1. Linux 添加开机启动项的三种方法

    linux 添加开机启动项的三种方法. (1)编辑文件 /etc/rc.local 输入命令:vim /etc/rc.local 将出现类似如下的文本片段: #!/bin/sh## This scri ...

  2. Win10怎么添加开机启动项?Win10添加开机自动运行软件三种方法

    Win10管理开机启动项的方法相信大家已经非常熟悉,msconfig命令各系统都通用,那么很多用户发觉Win10和Win7 XP等系统不同,没有启动文件夹,那么我们怎么添加开机启动项呢?如晨软件或程序 ...

  3. DataTable添加列和行的三种方法

    JRoger 原文 #region 方法一: DataTable tblDatas =new DataTable("Datas"); DataColumn dc =null; dc ...

  4. [.Net] DataTable添加列和行的三种方法

    #region 方法一: DataTable tblDatas =new DataTable("Datas"); DataColumn dc =null; dc = tblData ...

  5. SQL SERVER 表添加新字段

    SQL SERVER 表添加新字段 ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL; -- doc_exa 是表名 -- column_b 是新加的 ...

  6. mysql 中添加索引的三种方法

    原文:http://www.andyqian.com/2016/04/06/database/mysqleindex/ 在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以 ...

  7. MYSQL添加远程用户或允许远程访问三种方法

    添加远程用户admin密码为password GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY \'password\' WIT ...

  8. 【HANA系列】SAP HANA SLT 在表中隐藏字段并传入HANA的方法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SLT在表中隐 ...

  9. 【HANA系列】SAP HANA SLT在表中隐藏字段并传入HANA的方法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SLT在表中隐 ...

随机推荐

  1. Python中的base64模块

    本文介绍Python 2.7中的base64模块,该模块提供了基于rfc3548的Base16, 32, 64编解码的接口.官方文档,参考这里. 该模块提供两套接口,传统接口基于rfc1521的Bas ...

  2. 实现linux服务器之间无密码互访

    最近老是在群里看到许多同学问,linux之间无密码互访怎么弄啊,百度的看得我头晕之类的,所以我就写写怎么样在两台linux服务器之间实现无密码互访,也就是让它们互相信任的意思,废话不多说,直接上菜. ...

  3. node,npm的安装

    1. 在node的官网下载 2.安装node 3. 4.进入项目根目录,安装依赖:```npm install 如:npm install -g cnpm --registry=https://reg ...

  4. 地形系统lod

    参考其他引擎,地形有近到远进行越来越深的lod,基本完成 下面是u3d的,觉得原理应该是一样的

  5. 树莓派挂载ntfs优盘

    步骤一:解压安装NTFS-3G,使用如下命令.    sudo apt-get install ntfs-3g 步骤二:配置挂载NTFS格式的移动硬盘 1. 首先得到NTFS分区的信息  sudo f ...

  6. 使用go,基于martini,和websocket开发简易聊天室

    一.首先,需要了解一下websocket基本原理:here 二.go语言的websocket实现: 基于go语言的websocket也有不少,比如github.com/gorilla/websocke ...

  7. man 转 pdf _____ jpg 转 pdf

    man -t bash | ps2pdf - bash.pdf 将jpeg转成pdf convert *.jpeg images.pdf 将pdf转成jpeg gs -dBATCH -dNOPAUSE ...

  8. Allure Report使用

    https://blog.csdn.net/liuchunming033/article/details/79624474#commentBox https://blog.csdn.net/lihua ...

  9. vue父组件向子组件动态传值的两种方法

    在一些项目需求中需要父组件向子组件动态传值,比如我这里的需求是,父组件动态通过axios获取返回的图片url数组然后传给子组件,上传图片的子组件拿到该数组后进行遍历并展示图片,因为有时候获取到的会是空 ...

  10. Unity3D编辑器之重写Hierarchy的右键菜单

    using UnityEngine; using UnityEditor; using System.Collections; public class MyHierarchyMenu { [Menu ...