本示例主要以学生(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. 配置防盗链 访问控制Directory 访问控制FilesMatch

  2. C语言中的数组问题

    数组默认最后一位是 结束符 占一位, 假如是7个字节大小的数组 实际输入为6个字节,最后一个字节为'\0' 这样写 char password_set[7]={"123456"}; ...

  3. GetDlgItem的用法小结

    GetDlgItem用于获得指定控件ID的窗体指针,函数原型如下: HWND GetDlgItem( HWND hDlg, int nIDDlgItem ); CWnd* GetDlgItem(int ...

  4. (转)Java程序员应该知道的10个调试技巧

    (转自 酷勤网 – 程序员的那点事!http://www.kuqin.com/) 试可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里 ...

  5. Windbg在软件调试中的应用

    Windbg在软件调试中的应用 Windbg是微软提供的一款免费的,专门针对Windows应用程序的调试工具.借助于Windbg, 我们常见的软件问题:软件异常,死锁,内存泄漏等,就可以进行高效的排查 ...

  6. java用substring函数截取string中一段字符串

    在String中有两个substring()函数,如下: 一:String.substring(int start) 参数: start:要截取位置的索引 返回: 从start开始到结束的字符串 例如 ...

  7. mysql中如何开启binlog?开启二进制日志文件?binary log?

    需求描述: 开启mysql的binlog即binary log日志功能,在此记录下. 版本描述: mysql版本:5.7.21-log 操作过程: 1.修改my.cnf并且将以下参数加入其中,重启my ...

  8. Oauth2.0(四):Implicit 授权方式

    Oauth2.0的核心机制已经总结完毕.除了核心机制,Oauth2.0 还提供了几种标准的授权流程,分别适用于不同的场景.其中一种叫做 Implicit 授权,适用于纯静态页面应用.所谓纯静态页面应用 ...

  9. SpringMVC------pom.xml添加spring依赖,统一管理版本

    如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or ...

  10. cocos2dx 优化略记

    缓存cache: 预加载资源到内存, 可以异步加载.  直接使用sprite:create()来加载资源的话,  有时候会发现,  在第一次运行动作的时候会变的很卡.  那是因为第一次要加载资源到内存 ...