@ManyToMany中间表附加字段设计
在使用@ManyToMany时,若中间表只有相应的外键字段可以直接建立两个对应的Entity 设置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中间表附加字段设计的更多相关文章
- oracle查看所有表及字段
oracle表设计 http://blog.csdn.net/lanpy88/article/details/7580820 Oracle查看所有表和字段 获取表: select table_name ...
- SQL 把表中字段存储的逗号隔开内容转换成列表形式
原文:[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式 我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ...
- 关于数据库优化1——关于count(1),count(*),和count(列名)的区别,和关于表中字段顺序的问题
1.关于count(1),count(*),和count(列名)的区别 相信大家总是在工作中,或者是学习中对于count()的到底怎么用更快.一直有很大的疑问,有的人说count(*)更快,也有的人说 ...
- Hibernate给表和字段设置前后缀及分隔符
在<一口一口吃掉Hibernate(一)--使用SchemaExport生成数据表>中介绍了如何生成数据表.但是这只是最基本的.hibernate在生成或者操作数据库时,会受一些限制.比如 ...
- Mysql表的约束设计和关联关系设计
https://blog.csdn.net/u012750578/article/details/15026677 Mysql表的约束设计和关联关系设计 ======================表 ...
- ODI基于源表时间戳字段获取增量数据
实现目标:通过ODI获取一个没有时间戳的子表(qb_bw)的增量数据,而主表(qb_tb)有一个rksj入库时间,且主表和子表之间通过ID关联.目标表名是qb_bw1. 设计原理:通过在ODI的map ...
- Ecshop 表结构 字段说明
ecs_account_log 用户帐号情况记录表,包括资金和积分等 log_id mediumint 自增ID号user_id mediumint 用户登录后保存在session中的id号,跟use ...
- 表结构中updated_time设计为ON UPDATE CURRENT_TIMESTAMP时,使用过程的一个坑
一.mysql表结构中存在如下设计时 表结构中updated_time设计为ON UPDATE CURRENT_TIMESTAMP时,如下 `updated_time` datetime NOT NU ...
- Salesforce和SAP Netweaver里数据库表的元数据设计
从Salesforce官网可以了解到Salesforce的force.com平台里数据库表的设计:https://developer.salesforce.com/page/Multi_Tenant_ ...
随机推荐
- C#与C++的几个不同之处知识点
1.索引器 索引器是C#自创的内容,这是C++当中没有的内容,所以做一次笔记. 索引器是用于书写一个可以通过使用[]想数组一样直接访问集合元素的方法.我们只需要指定待访问实例或元素的索引.索引器的语法 ...
- 高性能页面加载技术(流水线加载)BigPipe的C#简单实现(附源码)
一,BigPipe简介 BigPipe是一个重新设计的基础动态网页服务体系.大体思路是,分解网页成叫做Pagelets的小块,然后通过Web服务器和浏览器建立管道并管理他们在不同阶段的运行.这是类似于 ...
- rm加转义很危险
rm -r 想转义一个空格字符,转得不对 -r, -R, --recursive 递归删除目录及其内容 连续rm了n个不想rm的文件夹.%>_<% 想起来以前有人也因为rm的失误把整个wo ...
- 【POJ】2528 Mayor's posters
离散化+线段树.数组开的不够大,wa了N多回. #include <iostream> #include <cstdio> #include <cstring> # ...
- 数据结构(平衡树,树分治,暴力重构):WC 2014 紫荆花之恋
[题目描述] 强强和萌萌是一对好朋友.有一天他们在外面闲逛,突然看到前方有一棵紫荆树.这已经是紫荆花飞舞的季节了,无数的花瓣以肉眼可见的速度从紫荆树上长了出来. 仔细看看的话,这棵大树实际上是一个带权 ...
- Linux学习笔记7——linux中的静态库和动态库
一.静态库的编译 静态库的编译过程如下: 1.编译成目标文件 这里有一个可选项-static,调用格式:gcc -c -static 代码文件名.c 2.归档成静态库 A.归档的工具是ar工具,使用a ...
- 【转】OpenGL相关函数库介绍
原文:http://blog.chinaunix.net/uid-20638550-id-1909182.html OpenGL 函数库相关的API有核心库(gl).实用库(glu).辅助库(aux) ...
- poj 2449 第k短路
题目链接:http://poj.org/problem?id=2449 #include<cstdio> #include<cstring> #include<iostr ...
- Openstack部署工具
Openstack发展很猛,很多朋友都很认同,2013年,会很好的解决OpenStack部署的问题,让安装,配置变得更加简单易用. 很多公司都投入人力去做这个,新浪也计划做一个Openstack的is ...
- c++ 控制台流和字符串流
前言 上一章节简单介绍c++中关于流的概念,这两章节将重点讲解如何使用,本章讲解控制台流和字符串流. 控制台输出流 输出流定义在头文件中,使用输出流最简单的方法就是 使用<<运算符.通过你 ...