关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】
来源:互联网 发布:淘宝350模板 编辑:程序博客网 时间:2024/05/19 20:42
查了好多资料
old:
@ManyToMany 注释:表示此类是多对多关系的一边,mappedBy 属性定义了此类为双向关系的维护端,注意:mappedBy 属性的值为此关系的另一端的属性名。
例如,在Student类中有如下方法:
被控方:
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "students")public Set<Teacher> getTeachers() { return teachers;}
那么这里的“students”就是Teachers的一个属性,通常应该是这样的:
Set students;
另一端的getStudents方法如下所示:
主控方:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)@JoinTable(name = "Teacher_Student",joinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName = "teacherid")},inverseJoinColumns = {@JoinColumn(name = "Student_ID",referencedColumnName ="studentid")})public Set<Student> getStudents() { return students;}
@ManyToMany 注释表示Teacher 是多对多关系的一端。@JoinTable 描述了多对多关系的数据表关系。name 属性指定中间表名称,joinColumns 定义中间表与Teacher 表的外键关系。上面的代码中,中间表Teacher_Student的Teacher_ID 列是Teacher 表的主键列对应的外键列,inverseJoinColumns 属性定义了中间表与另外一端(Student)的外键关系。
可以通过上面的定义看到有三个表学生表–老师表–老师学生中间表
以上提到主控方和被控方。。本人不赞同这种写法:
理由是: 1.既然是多对多关系。。为什么还要分主动方和被动方?
2.为什么需要删除老师后才级联中间表。。。请注意:以上定义方法时,删除学生是无法级联删除中间表的。
正确的写法应该是两边都用主控方的写法:
只是joinColumns和inverseJoinColumns属性的地方互换就可以了
new:(个人观点,,欢迎大家一起来讨论此问题)
总结:
个人的定义:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)@JoinTable(name = "Teacher_Student",joinColumns = {@JoinColumn(name = "Student_ID", referencedColumnName = "studentid")},inverseJoinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName ="teacherid")})public Set<Teacher> getTeachers() { return teachers;}@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)@JoinTable(name = "Teacher_Student",joinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName = "teacherid")},inverseJoinColumns = {@JoinColumn(name = "Student_ID",referencedColumnName ="studentid")})public Set<Student> getStudents() { return students;}
转自:http://blog.csdn.net/gabriel80/article/details/4260923
- 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】
- 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】
- 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】
- 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】
- 关系/对象映射 多对多关系(@ManyToMany 注释)【
- 关系/对象映射 多对多关系(@ManyToMany 注释)
- hibernate关系映射--单向多对多@ManyToMany
- hibernate关系映射--双向多对多@ManyToMany
- android对象关系映射框架ormlite学习之多对多(ManyToMany)
- Hibernate 单边多对多关系 @ManyToMany
- Hibernate对象关系映射-- 多对多关联关系映射
- Hibernate对象关系映射详解之一对多关系映射
- Hibernate12_映射关系---manyTomany
- Hibernate关系映射(六)多对多单向关联@ManyToMany Annotation方式
- Hibernate关系映射(七)多对多双向关联@ManyToMany Annotation方式
- MyBatis对象关系映射--- 多对一
- 注解@ManytoMany 多对多关系 简单使用方法
- Hibernate关系映射之多对多关系
- C# 中使用JSON - DataContractJsonSerializer
- 黑马程序员_OC类的研究和内存管理初识
- C++使用CriticalSection实现线程同步
- WCF客户端的调用
- shell 同时运行脚本里多个互不干扰的指令
- 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】
- 中国婆婆流泪自述:娶了个洋媳妇, 全家人生活巨变
- Android 使用URLConnection提交请求
- Java程序性能调优的基本知识和JDK调优
- 安卓 焦点获取和view放大问题(机顶盒应用)
- do...while(0)的妙用
- 网络编程socket之connect函数
- JDT的resolveBinding()问题的解决方案
- Android5.0系统WIFI状态如何向应用程序通知