- 浏览: 456494 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 2084最近处理一个压缩包,里面有几百上千个excel文件。本来 ... -
在firefox浏览器下出现如果引用外部连接不存在会隐藏红叉
2012-07-23 15:38 993在firefox下引用出错的一些图片会隐藏红叉。而在IE下 ... -
java 字符替换的一些问题值得记录下
2011-09-30 16:40 883最近在处理一些字符串的替换中发生的一些问题。 最近需要临 ... -
ExtJs学习之弹出框,提示框,输入框等框
2011-06-23 22:13 93781.ExtJs之消息框: 语法:Ext.MessageB ... -
FreeMarker学习之概念
2010-08-04 10:12 860FreeMarker概述: 引用 1. ... -
HTML标准属性
2010-07-03 20:35 753核心属性(Core attributes) 以下标签 ... -
HTML标签
2010-07-03 20:14 1004HTML 4.01 / XHTML 1.0 参考手册 按字母 ... -
HTML基础
2010-07-03 00:54 771基于Web前端技术是有HTML静态语言向现在的JaveSc ... -
Struts2的开发规范和技巧
2010-05-28 14:56 1237基于Struts2的开发,如果没有足够的经验和规范做支撑,并不 ... -
第一次的Struts2的一个异常记录
2010-05-28 14:22 1048在配置正确struts.xml、web.xml、Action类 ... -
Java处理Excel全解一
2010-05-25 10:00 2189在获取客户需求的时候 ... -
Java EE 6 规范之平台概述
2010-05-22 21:28 2211JavaTM平台企业版(Java EETM)的概述 体系结构 ... -
Python3入门学习
2010-05-14 14:51 2237在学习一门计算机语言的时候,首先接触的入门程序基本上都是& ... -
Python3操作文件,目录和路径
2010-05-14 11:48 35071.遍历文件夹和文件 ... -
内存溢出
2010-04-22 14:23 1424java SE应用程序共同的问 ... -
JPA之OneToOne关系处理
2010-04-18 14:05 3941在很早学习关系数据库的时候学过一对多,多对一,一对一,多对多的 ... -
JPA之OneToMany和ManyToOne处理
2010-04-18 13:52 18927前面介绍和总结了JPA ... -
JPA学习之二(入门篇)
2010-04-16 10:48 3761简单总结下,JPA的入门。在学习JPA的时候运用参考Hib ... -
JPA2.0的学习一
2010-04-15 17:18 8634Java EE 5平台引入了Java ... -
读取Properties文件的一些方法
2010-03-13 22:53 1163读取Properties文件常见的 ...
相关推荐
**JPA(Java ...`@ManyToMany`和`@OneToMany`注解是JPA中处理复杂关系的重要工具,通过测试可以确保这些关系正确地映射和持久化。在实际项目中,理解并熟练运用这些概念对于提升开发效率和代码质量至关重要。
总结起来,Spring Boot 1.5.2结合JPA处理ManyToMany关联时,需要注意双向引用可能导致的无限递归问题,通过`@JsonManagedReference`和`@JsonBackReference`来解决序列化问题,并合理管理事务和级联操作,以确保数据...
Spring JPA ManyToMany 原理及用法详解 Spring JPA 中的 ManyToMany 关系是一种复杂的关系,它允许一个实体与多个其他实体发生关系。在本文中,我们将详细介绍 Spring JPA ManyToMany 关系的原理及用法。 首先,...
总之,JPA的`@ManyToMany`注解为我们处理多对多关联提供了便利,但在实际应用中需要注意关联的维护和删除操作,以确保数据的完整性和一致性。通过理解和熟练运用这一特性,开发者能够更好地在Java应用中管理复杂的...
在这个“jpa-day3-manytomany.zip”压缩包中,我们很可能会找到一个关于如何在Spring Data JPA中处理多对多关系的示例或教程。下面,我们将深入探讨多对多关联的概念以及如何在实际应用中使用它。 首先,让我们理解...
**JPA(Java Persistence API)**是...总之,"JPA大全之经典全集"这个资源集合对于学习和掌握JPA有着重要的价值,无论是初学者还是经验丰富的开发者,都能从中受益,深入理解JPA的各个方面,提升自己的数据库编程能力。
JPA 2.0引入了许多增强功能,比如支持@OneToMany和@ManyToMany关系的双向映射,新增了@Temporal注解以处理日期和时间,增强了Criteria API,引入了@SecondaryTable注解以支持多表映射,还引入了Entity Graph来优化...
在JPA中,注解如`@Entity`用于标记实体类,`@Table`指定对应的数据库表,`@Id`定义主键,`@Column`定义字段属性,`@OneToMany`、`@ManyToOne`、`@OneToOne`和`@ManyToMany`处理关联关系等。针对Oracle,可能还会涉及...
Hibernate是最早的ORM框架之一,后来成为了JPA的一个实现。Hibernate JPA提供了JPA规范的全部功能,并且在JPA的基础上扩展了一些特性,如更强大的 Criteria 查询、HQL(Hibernate Query Language)等。Hibernate JPA...
在Spring Boot项目中,`ManyToMany`关系的实现主要依赖于Spring Data JPA,它是Spring Data的一个模块,简化了与JPA(Java Persistence API)的交互。下面将详细介绍如何在Spring Boot中配置和使用`ManyToMany`关系...
在"jpa之使用hibernate示例代码"中,我们可能会涉及以下关键知识点: 1. **实体类(Entity)**:在JPA中,实体类是Java类,代表数据库中的表。它需要使用`@Entity`注解标记,并且通常有一个主键字段,用`@Id`注解...
"JavaOne2009-JPA2映射的神秘之旅.pdf" 和 "JavaOne2009-JPA2新特征.pdf" 这两个文档,显然涵盖了JPA2的重要概念和新特性,特别是关于映射和框架的最新发展。以下是这两个主题的主要知识点: 1. **JPA2新特性**: ...
在JPA中,使用`@ManyToMany`注解来定义这种关系,并通常需要一个中间表来存储关联信息。 4. **JPAOneToOne**:这里演示的是JPA中一对一关联的实现。一对一关联是指一个实体只与另一个实体的一个实例相关联。使用`@...
- `@ManyToMany`:表示多对多关系,一方可以有多个另一方实例,反之亦然。 - `@JoinColumn` 和 `@JoinTable`:定义关联的列或表。 4. **扩展和特殊功能**: - `@Temporal`:处理日期和时间类型的存储。 - `@Lob...
JPA 提供了一种对象关系映射 (ORM) 方法来处理数据库,允许开发者以面向对象的方式操作数据库。本文将详细介绍 JPA 中四种常见的映射关系:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)以及...
JPA允许开发人员将数据库表映射到Java对象,从而在应用程序中以面向对象的方式处理数据,而无需直接操作SQL语句。 ### JPA的核心概念 在深入细节之前,了解JPA的基本概念至关重要: - **实体(Entity)**:这是...
`@ManyToMany`注解是Java Persistence API (JPA) 和Hibernate中的一个关键元素,它允许开发者定义两个实体类之间的多对多关联。 描述中提到的"manytomany注解模式.rar"进一步确认了这个压缩包内容的核心是围绕多对...
8. **关联映射**:JPA支持一对一、一对多、多对一和多对多的关系映射,通过@OneToOne、@OneToMany、@ManyToOne和@ManyToMany注解实现。 9. **懒加载和级联操作**:懒加载可以延迟加载关联的对象,直到真正需要时才...
Hibernate是一个流行的开源对象关系映射(ORM)框架,它完全支持JPA规范,使得开发者可以利用Hibernate的强大功能来处理JPA的持久化操作。 **JPA的主要概念和功能包括:** 1. **实体(Entities)**:在JPA中,实体...
Java 持续性API(JPA)是Java ...此外,JPA支持事务管理和事件处理,进一步完善了Java应用程序与数据库的集成。总的来说,JPA为Java开发者提供了强大的工具,降低了数据库编程的复杂性,提高了代码的可读性和可维护性。