JavaEE(14) - JPA关联映射
1. 单向N-1关联映射
2. 单向1-1关联映射
3. 单向1-N关联映射
4. 单向N-N关联映射
5. 双向1-1关联映射
6. 双向1-N关联映射
7. 双向N-N关联映射
1. 单向N-1关联映射(Net Beans创建Java Project, 项目名称:UnidirectionalManyToOne)
Person.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "person_table")
public class Person { //标识属性
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int personid; private String name;
private int age; // constructor // setter
// getter
}
Address.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "address_table")
public class Address { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int addressid; private String detail; @ManyToOne(optional = false, cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Person.class)
@JoinColumn(name = "person_id", nullable = false, updatable = false)
private Person person; public Address() {
} public Address(String detail) {
this.detail = detail;
} // setter
// getter
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
2. 单向1-1关联映射(Net Beans创建Java Project, 项目名称:UnidirectionalOneToOne)
Person.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "person_table")
public class Person { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int personid; private String name;
private int age; // constructor // setter
// getter
}
Address.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "address_table")
public class Address { //标识属性
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int addressid; private String detail; @OneToOne(optional = false, cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Person.class)
@JoinColumn(name = "person_id", nullable = false, updatable = false)
private Person person; // constructor // setter
// getter
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
3. 单向1-N关联映射(Net Beans创建Java Project, 项目名称:UnidirectionalOneToMany)
Person.java
package org.crazyit.model; import javax.persistence.*;
import java.util.*; @Entity
@Table(name = "person_table")
public class Person { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int personid; private String name;
private int age; //1-N关联关系,使用Set来保存关联实体
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Address.class)
@JoinColumn(name = "person_id", nullable = false)
private Set<Address> addresses = new HashSet<Address>(); // constructor // setter
// getter
}
Address.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "address_table")
public class Address { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int addressid; private String detail; // constructor // setter
// getter
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
4. 单向N-N关联映射(Net Beans创建Java Project, 项目名称:UnidirectionalManyToMany)
Person.java
package org.crazyit.model; import javax.persistence.*;
import java.util.*; @Entity
@Table(name = "person_table")
public class Person { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int personid; private String name;
private int age; //N-N关联关系,使用Set来保存关联实体
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Address.class)
@JoinTable(
name = "person_address",
joinColumns = @JoinColumn(name = "person_id"),
inverseJoinColumns = @JoinColumn(name = "address_id")
)
private Set<Address> addresses = new HashSet<Address>(); // constructor // setter
// getter
}
Address.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "address_table")
public class Address { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int addressid; private String detail; // constructor // setter
// getter
}
persistence.xml(参见12.2)
JpaQs.java
package lee; import java.util.List;
import javax.persistence.*; import org.crazyit.model.*; public class JpaQs { private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("qs"); public static void main(String[] args) {
EntityManager em = emf.createEntityManager(); Person sun = new Person();
sun.setName("sunwukong");
sun.setAge(500); Person zhu = new Person();
zhu.setName("zhubajie");
zhu.setAge(380); Address road = new Address("The road to Indian."); try {
em.getTransaction().begin(); sun.getAddresses().add(new Address("The water hole to the mountain."));
sun.getAddresses().add(road); zhu.getAddresses().add(new Address("Gao Laozhuang."));
zhu.getAddresses().add(road); em.persist(sun);
em.persist(zhu); em.getTransaction().commit();
}
finally {
em.close();
}
}
}
5. 双向1-1关联映射(Net Beans创建Java Project, 项目名称:BidirectionalOneToOne)
Person.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "person_table")
public class Person { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int personid; private String name;
private int age; /* 设置了mappedBy属性表明Person实体不控制关联关系,*/
@OneToOne(mappedBy = "person", cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Address.class)
private Address address; // constructor // setter
// getter }
Address.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "address_table")
public class Address { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int addressid; private String detail; @OneToOne(optional = false, cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Person.class)
@JoinColumn(name = "person_id", nullable = false, updatable = false)
private Person person; // constructor // setter
// getter
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
package lee; import java.util.List;
import javax.persistence.*; import org.crazyit.model.*; public class JpaQs {
private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("qs"); public static void main(String[] args) {
EntityManager em = emf.createEntityManager(); Person person = new Person();
person.setName("Sun");
person.setAge(500); Address address = new Address();
address.setDetail("Hua Guoshan"); try {
em.getTransaction().begin(); //因为Person实体不控制关联关系,因此让Address实体控制关联关系
address.setPerson(person); em.persist(address);
em.getTransaction().commit();
}
finally {
em.close();
}
}
}
6. 双向1-N关联映射(Net Beans创建Java Project, 项目名称:BidirectionalOneToMany)
Person.java
package org.crazyit.model; import javax.persistence.*;
import java.util.*; @Entity
@Table(name = "person_table")
public class Person { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int personid; private String name;
private int age; /* 设置了mappedBy属性表明Person实体不控制关联关系,
因此不能增加@JoinTable和@JoinColumn修饰*/
@OneToMany(cascade = CascadeType.ALL, mappedBy = "person", targetEntity = Address.class)
private Set<Address> addresses = new HashSet<Address>(); // constructor // setter
// getter
}
Address.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "address_table")
public class Address { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int addressid; private String detail; @ManyToOne(fetch = FetchType.EAGER, targetEntity = Person.class, cascade = CascadeType.ALL)
/* 使用@JoinColumn来配置外键列的信息 */
@JoinColumn(name = "person_id", nullable = true)
private Person person; // constructor // setter
// getter
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
7. 双向N-N关联映射(Net Beans创建Java Project, 项目名称:BidirectionalManyToMany)
Person.java
package org.crazyit.model; import javax.persistence.*;
import java.util.*; @Entity
@Table(name = "person_table")
public class Person { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int personid; private String name;
private int age; @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Address.class)
@JoinTable(
name = "person_address",
joinColumns = @JoinColumn(name = "person_id"),
inverseJoinColumns = @JoinColumn(name = "address_id")
)
private Set<Address> addresses = new HashSet<Address>(); // constructor // setter
// getter
}
Address.java
package org.crazyit.model; import javax.persistence.*;
import java.util.*; @Entity
@Table(name = "address_table")
public class Address { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int addressid; private String detail; /* 设置了mappedBy属性表明Address实体不控制关联关系,
因此不能增加@JoinTable和@JoinColumn修饰*/
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "addresses", fetch = FetchType.LAZY, targetEntity = Person.class)
private Set<Person> persons = new HashSet<Person>(); // constructor // setter
// getter
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
JavaEE(14) - JPA关联映射的更多相关文章
- jpa关联映射
参考:http://www.cnblogs.com/printN/p/6408818.html 官方文档:http://docs.jboss.org/hibernate/orm/5.2/usergui ...
- jpa关联映射(一)
开发中常用到数据表的关联(其实很难遇到..),spring-data-jpa(其实是hibernate)提供了一整套十分方便的注解来供我们使用表关联功能. OneToOne OneToMany Man ...
- JavaEE(13) - JPA属性映射
1. 映射实体的属性 #1. 使用@Transient修饰不想持久保存的Field #2. 使用@Enumerated修饰枚举类型的Field #3. 使用@Lob, @Basic修饰枚举类型的Fie ...
- Hibernate关联映射(转载)
原文:http://www.cnblogs.com/huxi/archive/2009/12/15/1624988.html 以简单的两个类为例: User(int id, String name) ...
- hibernate之关于使用连接表实现多对一关联映射
[Hibernate]之关于使用连接表实现多对一关联映射 在我们项目使用中採用中间表最多的一般就是多对一,或者是多对多,当然一对一使用中间表也是能够的,可是这样的几率通常少之又少!所以这里重点介绍多对 ...
- Hibernate框架--关联映射,一对多,多对多 inverse cascade
回顾Hibernate: 1. hibernate开发环境搭建 ----> 引入jar: hibernate.jar + required + jpa + 驱动包 ---> hiberna ...
- mybatis关联映射一对多
实际项目中也存在很多的一对多的情况,下面看看这个简单的例子 table.sql CREATE TABLE tb_clazz( id INT PRIMARY KEY AUTO_INCREMENT, CO ...
- Hibernatel框架关联映射
Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
随机推荐
- LeetCode 53 Spiral Matrix
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
- 重新想象 Windows 8 Store Apps (13) - 控件之 SemanticZoom
原文:重新想象 Windows 8 Store Apps (13) - 控件之 SemanticZoom [源码下载] 重新想象 Windows 8 Store Apps (13) - 控件之 Sem ...
- 玩转web之javaScript(五)---js和jquery一些不可不知的方法(input篇)
很多时候我们都利用js和jquery中操作input,比如追加属性,改变属性值等等,我在这里简单的整理了一下,并在以后逐步补充. 1:删除input的某一属性. <input name=&quo ...
- 银行家算法java实现
关于银行家算法的理论知识,课本或者百度上有好多资料,我就不再多说了,这里把我最近写的银行家算法的实现带码贴出来. 由于这是我们的一个实验,对系统资源数和进程数都指定了,所以这里也将其指定了,其中系统资 ...
- strchr,wcschr 和strrchr, wcsrchr,_tcschr,_tcsrchr功能
strchr,wcschr 和strrchr, wcsrchr,_tcschr,_tcsrchr功能 (1) char *strchr( const char *string, int ...
- fork与vfork详解
一.fork函数 要创建一个进程,最基本的系统调用是fork,系统调用fork用于派生一个进程,函数原型如下: pid_t fork(void) 若成功,父进程中返回子进程ID,子进程中返回0,若出 ...
- WPF3D学习,立方体的绘制
原文:WPF3D学习,立方体的绘制 以此为一个好的开始吧!一直都太懒,坚持写文章是个不错的开始!碰巧最近在研究WPF3D这块的知识,也为了练练自己的写作水平,整理这篇文章.新手上路,多多关照! 本文先 ...
- FTP文件操作之删除文件
上面我已经介绍了利用ftp进行上传跟下载,接下来跟大家分享的是删除ftp服务器上的文件的部分.有了上传,有了下载,那么删除自然也是不能少的. 删除相对于上传跟下载更简单一些,它不需要进行文件的传输,只 ...
- 【C语言探索之旅】 第二部分第十课:练习题和习作
内容简介 1.课程大纲 2.第二部分第十一课: 练习题和习作 3.第三部分第一课预告: 安装SDL 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言 ...
- Android菜鸟的成长笔记(15)—— Android中的状态保存探究(下)
原文:Android菜鸟的成长笔记(15)-- Android中的状态保存探究(下) 在上一篇中我们简单了解关于Android中状态保存的过程和原理,这一篇中我们来看一下在系统配置改变的情况下保存数据 ...