在使用@ManyToMany时,若中间表只有相应的外键字段可以直接建立两个对应的Entity 设置ManyToMany

@ManyToMany 两个表多对多关联

但若是中间表有自己的附加字段,这需要为中间表建立Entity

具体如下:

Teacher <=> Student 中间表 teacher_student 附加字段 id(自增),siteId(站点id方便批删除)

增加 Teacher <=> Student 关联时,增加新的TeacherStudent

Entity:

@Entity
@Table(name = "teacher")
public class Teacher { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; @Column(name = "name")
private String name; @Column(name = "age")
private int age; @ManyToMany(cascade = CascadeType.PERSIST, fetch=FetchType.LAZY)
@JoinTable(name="teacher_student",joinColumns={@JoinColumn(name="tid")},inverseJoinColumns={@JoinColumn(name="sid")})
private Set<Student> students; @OneToMany(mappedBy="teacher", fetch = FetchType.LAZY)
private Set<TeacherStudent> teacherStudents; 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;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Set<Student> getStudents() {
return students;
} public void setStudents(Set<Student> students) {
this.students = students;
} public Set<TeacherStudent> getTeacherStudents() {
return teacherStudents;
} public void setTeacherStudents(Set<TeacherStudent> teacherStudents) {
this.teacherStudents = teacherStudents;
}
}
@Entity
@Table(name = "student")
public class Student { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; @Column(name = "name")
private String name; @Column(name = "age")
private int age; @ManyToMany(cascade = CascadeType.PERSIST, fetch=FetchType.LAZY)
@JoinTable(name="teacher_student", joinColumns={@JoinColumn(name="sid")}, inverseJoinColumns={@JoinColumn(name="tid")})
private Set<Teacher> teachers; @OneToMany(mappedBy="student", fetch = FetchType.LAZY)
private Set<TeacherStudent> teacherStudents; 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;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Set<Teacher> getTeachers() {
return teachers;
} public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
} public Set<TeacherStudent> getTeacherStudents() {
return teacherStudents;
} public void setTeacherStudents(Set<TeacherStudent> teacherStudents) {
this.teacherStudents = teacherStudents;
}
}

中间表

@Entity
@Table(name = "teacher_student")
public class TeacherStudent { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; @ManyToOne(fetch = FetchType.LAZY)
@Cascade(value = CascadeType.SAVE_UPDATE)
@JoinColumn(name="tid")
private Teacher teacher; @ManyToOne(fetch = FetchType.LAZY)
@Cascade(value = CascadeType.SAVE_UPDATE)
@JoinColumn(name="sid")
private Student student; @JoinColumn
private int siteId; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public Teacher getTeacher() {
return teacher;
} public void setTeacher(Teacher teacher) {
this.teacher = teacher;
} public Student getStudent() {
return student;
} public void setStudent(Student student) {
this.student = student;
} public int getSiteId() {
return siteId;
} public void setSiteId(int siteId) {
this.siteId = siteId;
}
}

@ManyToMany中间表附加字段设计的更多相关文章

  1. oracle查看所有表及字段

    oracle表设计 http://blog.csdn.net/lanpy88/article/details/7580820 Oracle查看所有表和字段 获取表: select table_name ...

  2. SQL 把表中字段存储的逗号隔开内容转换成列表形式

    原文:[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式 我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ...

  3. 关于数据库优化1——关于count(1),count(*),和count(列名)的区别,和关于表中字段顺序的问题

    1.关于count(1),count(*),和count(列名)的区别 相信大家总是在工作中,或者是学习中对于count()的到底怎么用更快.一直有很大的疑问,有的人说count(*)更快,也有的人说 ...

  4. Hibernate给表和字段设置前后缀及分隔符

    在<一口一口吃掉Hibernate(一)--使用SchemaExport生成数据表>中介绍了如何生成数据表.但是这只是最基本的.hibernate在生成或者操作数据库时,会受一些限制.比如 ...

  5. Mysql表的约束设计和关联关系设计

    https://blog.csdn.net/u012750578/article/details/15026677 Mysql表的约束设计和关联关系设计 ======================表 ...

  6. ODI基于源表时间戳字段获取增量数据

    实现目标:通过ODI获取一个没有时间戳的子表(qb_bw)的增量数据,而主表(qb_tb)有一个rksj入库时间,且主表和子表之间通过ID关联.目标表名是qb_bw1. 设计原理:通过在ODI的map ...

  7. Ecshop 表结构 字段说明

    ecs_account_log 用户帐号情况记录表,包括资金和积分等 log_id mediumint 自增ID号user_id mediumint 用户登录后保存在session中的id号,跟use ...

  8. 表结构中updated_time设计为ON UPDATE CURRENT_TIMESTAMP时,使用过程的一个坑

    一.mysql表结构中存在如下设计时 表结构中updated_time设计为ON UPDATE CURRENT_TIMESTAMP时,如下 `updated_time` datetime NOT NU ...

  9. Salesforce和SAP Netweaver里数据库表的元数据设计

    从Salesforce官网可以了解到Salesforce的force.com平台里数据库表的设计:https://developer.salesforce.com/page/Multi_Tenant_ ...

随机推荐

  1. Contest20140710 eagleeggs

    eagleeggs|eagleeggs.in|eagleeggs.out 题目描述: 共有N个硬度相同的鹰蛋,硬度是一个整数(并且已知其不大于H),表示这个蛋从天上掉下来不摔碎的最大高度.为了找出这个 ...

  2. QT获得所有系统环境变量(包括Linux和MAC的信息)

    系统环境变量还是挺重要的,除了QStandardPaths(感觉都是文档类型的变量,QT4使用QDesktopServices),更有QProcessEnvironment(都是真正的系统变量): Q ...

  3. Delphi在win7/vista下写注册表等需要管理员权限的解决方案

    看到论坛好多人问win7下写注册表的问题,我结合自己的理解写了一点东西,首先声明一下,本人初学Delphi,水平有限,大家见笑了,有什么不对之处请老鸟多指点. [背景]win7/Vista提供的UAC ...

  4. lc面试准备:Regular Expression Matching

    1 题目 Implement regular expression matching with support for '.' and '*'. '.' Matches any single char ...

  5. C# 读写INI 文件

    INI 格式: [Section1] KeyWord1 = Value1 KeyWord2 = Value2 ... [Section2] KeyWord3 = Value3 KeyWord4 = V ...

  6. android 自动化(1)

    学习android自动化测试要感谢一个朋友耐心的指导 环境搭建:(需要java JDK 以及android SDK) JDK:http://www.oracle.com/technetwork/jav ...

  7. OpenStack G版以后的Availability Zone与Aggregate Hosts

    关于Availability Zone与Aggregate Hosts的概念解析,可以参考这篇文章:http://blog.chinaunix.net/uid-20940095-id-3875022. ...

  8. C语言实现两栈空间共享

    一个同学让我改一段两栈共享的C语言代码,实现进栈.出栈.输出栈里元素的功能. 代码如下: #include <stdio.h> #include <stdlib.h> #def ...

  9. FastDfs 说明、安装、配置

    fastdfs是一个开源的,高性能的的分布式文件系统,他主要的功能包括:文件存储,同步和访问,设计基于高可用和负载均衡,fastfd非常适用于基于文件服务的站点,例如图片分享和视频分享网站 fastf ...

  10. hdoj 2199 Can you solve this equation?【浮点型数据二分】

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...