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关联映射的更多相关文章

  1. jpa关联映射

    参考:http://www.cnblogs.com/printN/p/6408818.html 官方文档:http://docs.jboss.org/hibernate/orm/5.2/usergui ...

  2. jpa关联映射(一)

    开发中常用到数据表的关联(其实很难遇到..),spring-data-jpa(其实是hibernate)提供了一整套十分方便的注解来供我们使用表关联功能. OneToOne OneToMany Man ...

  3. JavaEE(13) - JPA属性映射

    1. 映射实体的属性 #1. 使用@Transient修饰不想持久保存的Field #2. 使用@Enumerated修饰枚举类型的Field #3. 使用@Lob, @Basic修饰枚举类型的Fie ...

  4. Hibernate关联映射(转载)

    原文:http://www.cnblogs.com/huxi/archive/2009/12/15/1624988.html 以简单的两个类为例: User(int id, String name)  ...

  5. hibernate之关于使用连接表实现多对一关联映射

    [Hibernate]之关于使用连接表实现多对一关联映射 在我们项目使用中採用中间表最多的一般就是多对一,或者是多对多,当然一对一使用中间表也是能够的,可是这样的几率通常少之又少!所以这里重点介绍多对 ...

  6. Hibernate框架--关联映射,一对多,多对多 inverse cascade

    回顾Hibernate: 1. hibernate开发环境搭建 ----> 引入jar: hibernate.jar + required + jpa + 驱动包 ---> hiberna ...

  7. mybatis关联映射一对多

    实际项目中也存在很多的一对多的情况,下面看看这个简单的例子 table.sql CREATE TABLE tb_clazz( id INT PRIMARY KEY AUTO_INCREMENT, CO ...

  8. Hibernatel框架关联映射

    Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...

  9. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

随机推荐

  1. php laravel 帧 该文件上传

    好,我承认我的忠告. 今天laravel框架编写一个文件上传部分.总能找到不正确的路径.但是,终于攻克. 以下我分享一下自己的学习体会吧. client <form method="P ...

  2. Android_declare-styleable_自己定义控件的属性

    1.简单实例 (1).在res/values文件下定义一个attrs.xml文件 <? xml version="1.0" encoding="utf-8" ...

  3. 重新想象 Windows 8 Store Apps (14) - 控件 UI: RenderTransform, Projection, Clip, UseLayoutRounding

    原文:重新想象 Windows 8 Store Apps (14) - 控件 UI: RenderTransform, Projection, Clip, UseLayoutRounding [源码下 ...

  4. Hadoop学问Eclipse构建Hadoop工程

    在此之前的基础Hadoop在官方文件HDFS.MapReduce架构.配置管理是学习,但是,一些地方的官方文件相当含糊的解释. 我们没有发挥人可以体验,某种官方文件似业务规则或要求,但是,真正的细节还 ...

  5. Cocos发展Visual Studio下一个libcurl图书馆开发环境的搭建

    我们解释win32在Visual Studio下一个libcurl图书馆开发环境的搭建.Cocos2d-x发动机实际上与Win32在访问libcurl库.Cocos2d-x 3.x在libcurl库文 ...

  6. poj 3414 Pots (bfs+线索)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10071   Accepted: 4237   Special J ...

  7. ZooKeeper实践方案:(7) 分布式锁

    1.基本介绍 分布式锁是控制分布式系统之间同步訪问共享资源的一种方式,须要相互排斥来防止彼此干扰来保证一致性. 利用Zookeeper的强一致性能够完毕锁服务.Zookeeper的官方文档是列举了两种 ...

  8. C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容

    内容简介 1.课程大纲 2.第一部分第四课第三章:变量的世界之显示变量内容 3.第一部分第五课预告:基本运算 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用 ...

  9. Win7设置局域网共享

    Win7设置局域网共享 1. 把win7的guest用户开启. 打开win7的控制面板=>用户账号与安全=>用户账户=>管理其他用户=>点击guest用户,进行开启. 2.解决 ...

  10. JCombox

    A component that combines a button or editable field and a drop-down list. The user can select a val ...