- 浏览: 443822 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (354)
- 面向对象分析设计/系统架构 (12)
- Mysql/Orcal11g (13)
- JSP/Java//Python/Xharbour (66)
- 软件测试 (21)
- 信息安全小知识 (1)
- Android (5)
- IT生活/哲学/兵法 (23)
- 软件工程/UML/需求分析学习与实践 (6)
- 操作系统/网络/组成原理 (9)
- 持续集成Maven/Hudson/自动化测试 (9)
- eBay /Paypal developer (10)
- Hadoop/HBase/Solr (0)
- 重构分析及其思考 (2)
- 企业架构 (7)
- 分析模式/设计模式 (4)
- SSH学习笔记 (1)
- Quartz及其JWatch监控 (0)
- Linux服务器 (0)
- ExtJs学习笔记 (1)
- 重读java编程思想 (3)
- ESB/SOA/WebServices (0)
- SpringMVC/Struts/Hibernate/Spring (7)
- Xharbour/Pelles C/ SQLite3 (0)
- Magento 电商 (1)
- Object C (1)
- note/redis (0)
- SpringBoot (0)
最新评论
-
snow8261:
太粗略了。
企业架构之数据架构 -
haithink:
面试成功没?
JVM 加载Class文件的原理及其机制 -
feisi0003731843:
不好意思我没有重启,重启后好多了,可有的地方回放还是不成功的。 ...
Selenium IDE测试ExtJs一种测试解决办法 -
feisi0003731843:
这个好像不行吧,我试过了不好使啊。还是用id来做的。不能用啊。 ...
Selenium IDE测试ExtJs一种测试解决办法 -
yuchensuifeng:
您好,静态页面是可以的,但是,我指定error-page为js ...
JSP创建错误处理页面
在处理关系中,最为麻烦的可能是多对多的关系处理,因为多对多的关系要要一个中间表来进行维护。但是实际上多对多的关系也是我们比较常见的一种关系。
业务需求:在学校的选课系统中老师和学生的关系则是一种多对多的关系
首先还是将老师和学生的实体类编写出来。
测试类
总结:这里更要注意关系维护端和关系被维护端。
业务需求:在学校的选课系统中老师和学生的关系则是一种多对多的关系
首先还是将老师和学生的实体类编写出来。
import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; @Entity public class Student { private Integer id; private String name; private Set<Teacher> teachers = new HashSet<Teacher>();//用集合类来存放teacher public Student(){} public Student(String name) { this.name = name; } @Id @GeneratedValue public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(length = 10, nullable = false) public String getName() { return name; } @ManyToMany(cascade = CascadeType.REFRESH) @JoinTable(name = "student_teacher", inverseJoinColumns = @JoinColumn(name = "teacher_id"), joinColumns = @JoinColumn(name = "student_id")) //JoinTable就是定义中间表的名字以及关联字段名 public Set<Teacher> getTeacher() { return teachers; } public void setTeacher(Set<Teacher> teacher) { this.teachers = teacher; } public void setName(String name) { this.name = name; } public void addTeacher(Teacher teacher){ this.teachers.add(teacher); } public void removeTeacher(Teacher teacher){ if(this.teachers.contains(teacher)){//判断该学生是否包含了这个老师,如果存在就删除。这里要重新Teacher类中的hashCode和equals方法 this.teachers.remove(teacher); } } }
import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToMany; @Entity public class Teacher { private Integer id; private String name; private Set<Student> student = new HashSet<Student>(); public Teacher(){} public Teacher(String name) { this.name = name; } @Id @GeneratedValue public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(length = 10, nullable = false) public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToMany(cascade=CascadeType.REFRESH,mappedBy="teacher")//这里说明了关系维护端是student,teacher是关系被维护端 public Set<Student> getStudent() { return student; } public void setStudent(Set<Student> student) { this.student = student; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Teacher other = (Teacher) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; } }
测试类
package junit.test; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.junit.BeforeClass; import org.junit.Test; import cn.itcast.bean.Student; import cn.itcast.bean.Teacher; public class ManyToManyTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void save() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("test"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); em.persist(new Student("Twe")); em.persist(new Teacher("蒋老师")); em.getTransaction().commit(); em.close(); factory.close(); } /** * 建立学生和老师的关系 */ @Test public void buildTS() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("test"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); Student student = em.find(Student.class, 1); student.addTeacher(em.getReference(Teacher.class, 1)); em.getTransaction().commit(); em.close(); factory.close(); } /** * 解除学生和老师的关系 */ @Test public void deleteTS() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("test"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); Student student = em.find(Student.class, 1); student.removeTeacher(em.getReference(Teacher.class, 1)); em.getTransaction().commit(); em.close(); factory.close(); } /** * 删除老师 */ @Test public void deleteTeacher() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("test"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); Student student = em.find(Student.class, 1); Teacher teacher = em.getReference(Teacher.class, 1); student.removeTeacher(teacher); em.remove(em.getReference(Teacher.class, 1)); em.getTransaction().commit(); em.close(); factory.close(); } /** * 删除学生 */ @Test public void deleteStudent() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("test"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); Student student = em.getReference(Student.class, 1); em.remove(student); em.getTransaction().commit(); em.close(); factory.close(); } }
总结:这里更要注意关系维护端和关系被维护端。
发表评论
-
java实现读取文件下所有的excel文件
2012-08-10 09:30 2009最近处理一个压缩包,里面有几百上千个excel文件。本来 ... -
在firefox浏览器下出现如果引用外部连接不存在会隐藏红叉
2012-07-23 15:38 960在firefox下引用出错的一些图片会隐藏红叉。而在IE下 ... -
java 字符替换的一些问题值得记录下
2011-09-30 16:40 843最近在处理一些字符串的替换中发生的一些问题。 最近需要临 ... -
ExtJs学习之弹出框,提示框,输入框等框
2011-06-23 22:13 92651.ExtJs之消息框: 语法:Ext.MessageB ... -
FreeMarker学习之概念
2010-08-04 10:12 829FreeMarker概述: 引用 1. ... -
HTML标准属性
2010-07-03 20:35 723核心属性(Core attributes) 以下标签 ... -
HTML标签
2010-07-03 20:14 965HTML 4.01 / XHTML 1.0 参考手册 按字母 ... -
HTML基础
2010-07-03 00:54 736基于Web前端技术是有HTML静态语言向现在的JaveSc ... -
Struts2的开发规范和技巧
2010-05-28 14:56 1199基于Struts2的开发,如果没有足够的经验和规范做支撑,并不 ... -
第一次的Struts2的一个异常记录
2010-05-28 14:22 987在配置正确struts.xml、web.xml、Action类 ... -
Java处理Excel全解一
2010-05-25 10:00 2150在获取客户需求的时候 ... -
Java EE 6 规范之平台概述
2010-05-22 21:28 2179JavaTM平台企业版(Java EETM)的概述 体系结构 ... -
Python3入门学习
2010-05-14 14:51 2192在学习一门计算机语言的时候,首先接触的入门程序基本上都是& ... -
Python3操作文件,目录和路径
2010-05-14 11:48 34651.遍历文件夹和文件 ... -
内存溢出
2010-04-22 14:23 1381java SE应用程序共同的问 ... -
JPA之OneToOne关系处理
2010-04-18 14:05 3906在很早学习关系数据库的时候学过一对多,多对一,一对一,多对多的 ... -
JPA之OneToMany和ManyToOne处理
2010-04-18 13:52 18886前面介绍和总结了JPA ... -
JPA学习之二(入门篇)
2010-04-16 10:48 3720简单总结下,JPA的入门。在学习JPA的时候运用参考Hib ... -
JPA2.0的学习一
2010-04-15 17:18 8578Java EE 5平台引入了Java ... -
读取Properties文件的一些方法
2010-03-13 22:53 1122读取Properties文件常见的 ...
相关推荐
JPA课程manyToMany OneToMany 等全部测试 注解, 有注释
趟坑 ManyToMany 循环引用 死循环 栈内存溢出问题
主要介绍了spring jpa ManyToMany原理及用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
NULL 博文链接:https://lc2586.iteye.com/blog/722671
spring data jpa 的多表联查 多对多操作 案例:用户和角色(多对多关系) 用户: 角色:
Spring Boot JPA中关联表的使用 本文中,我们会将会通过一个Book和Category的关联关系,来讲解如何在JPA中使用。 添加依赖 我们还是使用H2内存数据库来做测试: org.springframework.boot spring-boot-starter-...
这是JPA标签配置手册,从ORACLE官方得到的资料,里面对JPA所有的标签都进行详细的说明。 Index of Annotations • A o @AssociationOverride o @AssociationOverrides o @AttributeOverride o @AttributeOverrides ...
@ManyToMany 一方写 mappedBy 放弃外键维护、另一方 @JoinTable 维护中间表 收派标准修添加能实现 html 请求 后台处理 服务器端Service和DAO编写整合springdatajpa 业务层接口 修改 Action 代码调用 ...
医院预约系统End-End Java Spring Boot应用程序和重新检查... 这个微型项目的概念介绍:1.Hibernate继承2.Spring数据JPA关联1.ManyToMany 2.OneToMany 3.ManyToOne 3.组件继承4.Java 8新概念1.Funtional接口2.Streams
伊利亚米亚·维奥雷尔(Ieremias Viorel)和瓦拉迪·罗伯特 分层架构+ MVC +客户端-服务器; DP:构建器(User.java)+过滤器(WebSecurityConfig.... SpringBoot + JPA + Thymeleaf + JavaScript / jQuery; Gradle。
@Inheritance 注解来定义所选的之类策略。 每个类一张表 @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Flight implements Serializable { 有缺点,如多态查询或关联。...