1.ORM:
Object Relational Mapping
对象/关系映射
2.一对一关系映射 @OneToOne
2.1.一对一单向映射
单向:A到B,不需要B到A
如一个人对应一部家庭电话
而一部家庭电话并不可能只对应一个人
实际情况下:是从人定位到电话而不是从电话定位到所有人
Person_OneToOneSingle
package orm.onetoone.single; import java.io.Serializable; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; @Entity public class Person_OneToOneSingle implements Serializable { private static final long serialVersionUID = 1L; private long id; private String name; private String sex; private int age; private HomePhone_OneToOneSingle homePhone; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } public String getName() { return name; } public String getSex() { return sex; } public int getAge() { return age; } @OneToOne(cascade=CascadeType.ALL,optional=true) public HomePhone_OneToOneSingle getHomePhone() { return homePhone; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public void setAge(int age) { this.age = age; } public void setHomePhone(HomePhone_OneToOneSingle homePhone) { this.homePhone = homePhone; } }
HomePhone_OneToOneSingle
package orm.onetoone.single; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class HomePhone_OneToOneSingle implements Serializable { private static final long serialVersionUID = 1L; private long phone; private String country,province,city,street; private int postcode; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getPhone() { return phone; } public String getCountry() { return country; } public String getProvince() { return province; } public String getCity() { return city; } public String getStreet() { return street; } public int getPostcode() { return postcode; } public void setPhone(long phone) { this.phone = phone; } public void setCountry(String country) { this.country = country; } public void setProvince(String province) { this.province = province; } public void setCity(String city) { this.city = city; } public void setStreet(String street) { this.street = street; } public void setPostcode(int postcode) { this.postcode = postcode; } }
表结构:
2.2一对一双向映射
人和身份证号:从人可以定位到身份证号,从身份证号可以定位到人是双向的一对一映射
Person_OneToOneEach
package orm.onetoone.each; import java.io.Serializable; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import orm.onetoone.single.HomePhone_OneToOneSingle; @Entity public class Person_OneToOneEach implements Serializable { private static final long serialVersionUID = 1L; private long id; private String name; private String sex; private int age; private HomePhone_OneToOneSingle homePhone; private IDCard_OneToOneEach idCard; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } public String getName() { return name; } public String getSex() { return sex; } public int getAge() { return age; } @OneToOne(cascade=CascadeType.ALL,optional=true) public HomePhone_OneToOneSingle getHomePhone() { return homePhone; } @OneToOne(cascade=CascadeType.ALL,optional=true) public IDCard_OneToOneEach getIdCard() { return idCard; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public void setAge(int age) { this.age = age; } public void setHomePhone(HomePhone_OneToOneSingle homePhone) { this.homePhone = homePhone; } public void setIdCard(IDCard_OneToOneEach idCard) { this.idCard = idCard; } }
IDCard_OneToOneEach
package orm.onetoone.each; import java.io.Serializable; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; @Entity public class IDCard_OneToOneEach implements Serializable{ private static final long serialVersionUID = 1L; private long id; private Person_OneToOneEach person; private String cardNumber; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } @OneToOne(cascade=CascadeType.ALL,mappedBy="idCard",optional=false) public Person_OneToOneEach getPerson() { return person; } public String getCardNumber() { return cardNumber; } public void setId(long id) { this.id = id; } public void setPerson(Person_OneToOneEach person) { this.person = person; } public void setCardNumber(String cardNumber) { this.cardNumber = cardNumber; } }
表结构:
3。 一对多 one-to-many
3.1一对多单向映射
人与电话之间的关系,一个人可以有多个电话,但是多个电话不一定属于一个人的,因为电话号码今天可能是你的,明天可能就是别人的了
Person_OneToManySingle
package orm.onetomany.single; import java.io.Serializable; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import orm.onetoone.each.IDCard_OneToOneEach; import orm.onetoone.single.HomePhone_OneToOneSingle; @Entity public class Person_OneToManySingle implements Serializable { private static final long serialVersionUID = 1L; private long id; private String name; private String sex; private int age; private HomePhone_OneToOneSingle homePhone; private IDCard_OneToOneEach idCard; private List<Phone_OneToManyEach> phones; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } @OneToMany(cascade=CascadeType.ALL) @JoinColumn(name="personID") public List<Phone_OneToManyEach> getPhones() { return phones; } @OneToOne(cascade=CascadeType.ALL,optional=true) public HomePhone_OneToOneSingle getHomePhone() { return homePhone; } @OneToOne(cascade=CascadeType.ALL,optional=true) public IDCard_OneToOneEach getIdCard() { return idCard; } public String getName() { return name; } public String getSex() { return sex; } public int getAge() { return age; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public void setAge(int age) { this.age = age; } public void setHomePhone(HomePhone_OneToOneSingle homePhone) { this.homePhone = homePhone; } public void setIdCard(IDCard_OneToOneEach idCard) { this.idCard = idCard; } public void setPhones(List<Phone_OneToManyEach> phones) { this.phones = phones; } }
Phone_OneToManySingle
package orm.onetomany.single; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Phone_OneToManySingle implements Serializable { private static final long serialVersionUID = 1L; private long id; private String phoneNumber; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } public String getPhoneNumber() { return phoneNumber; } public void setId(long id) { this.id = id; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } }
表结构:
3.2一对多双向映射
人下订单,一个人可以下多个订单,每个订单都有对应的下订单的人,他们是双向映射
Person_OneToManyEach
package orm.onetomany.each; import java.io.Serializable; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import orm.onetomany.single.Phone_OneToManySingle; import orm.onetoone.each.IDCard_OneToOneEach; import orm.onetoone.single.HomePhone_OneToOneSingle; @Entity public class Person_OneToManyEach implements Serializable { private static final long serialVersionUID = 1L; private long id; private String name; private String sex; private int age; private HomePhone_OneToOneSingle homePhone; private IDCard_OneToOneEach idCard; private List<Phone_OneToManySingle> phones; private List<Order_OneToManyEach> orders; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } @OneToMany(cascade=CascadeType.ALL) @JoinColumn(name="personID") public List<Phone_OneToManySingle> getPhones() { return phones; } @OneToOne(cascade=CascadeType.ALL,optional=true) public HomePhone_OneToOneSingle getHomePhone() { return homePhone; } @OneToOne(cascade=CascadeType.ALL,optional=true) public IDCard_OneToOneEach getIdCard() { return idCard; } @OneToMany(cascade=CascadeType.ALL,mappedBy="person") public List<Order_OneToManyEach> getOrders() { return orders; } public String getName() { return name; } public String getSex() { return sex; } public int getAge() { return age; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public void setAge(int age) { this.age = age; } public void setHomePhone(HomePhone_OneToOneSingle homePhone) { this.homePhone = homePhone; } public void setIdCard(IDCard_OneToOneEach idCard) { this.idCard = idCard; } public void setPhones(List<Phone_OneToManySingle> phones) { this.phones = phones; } public void setOrders(List<Order_OneToManyEach> orders) { this.orders = orders; } }
Order_OneToManyEach
package orm.onetomany.each; import java.io.Serializable; import java.util.Date; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; @Entity public class Order_OneToManyEach implements Serializable{ private static final long serialVersionUID = 1L; private long id; private Person_OneToManyEach person; private String orderNumber; private String orderName; private Date date; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } @ManyToOne(cascade=CascadeType.ALL,optional=false) @JoinColumn(name="personID") public Person_OneToManyEach getPerson() { return person; } public String getOrderNumber() { return orderNumber; } public String getOrderName() { return orderName; } public Date getDate() { return date; } public void setId(long id) { this.id = id; } public void setPerson(Person_OneToManyEach person) { this.person = person; } public void setOrderNumber(String orderNumber) { this.orderNumber = orderNumber; } public void setOrderName(String orderName) { this.orderName = orderName; } public void setDate(Date date) { this.date = date; } }
表结构
4.多对一单向关联
多的一方知道自己属于一的一方,而一的一方并不知道多的一方,如人和国家,很多人肯定属于一个国家,而国家并不知道每个人
Person_ManyToOneSingle
package orm.manytoone.single; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; @Entity public class Person_ManyToOneSingle implements Serializable { private static final long serialVersionUID = 1L; private long id; private String name; private String sex; private int age; private Country_ManyToOneSingle country; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } @ManyToOne @JoinColumn(name="countryID") public Country_ManyToOneSingle getCountry() { return country; } public String getName() { return name; } public String getSex() { return sex; } public int getAge() { return age; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public void setAge(int age) { this.age = age; } public void setCountry(Country_ManyToOneSingle country) { this.country = country; } }
Country_ManyToOneSingle
package orm.manytoone.single; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Country_ManyToOneSingle implements Serializable { private static final long serialVersionUID = 1L; private long id; private String name; private String area; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } public String getName() { return name; } public String getArea() { return area; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setArea(String area) { this.area = area; } }
表结构:
5.多对多many-to-many
5.1多对多单向映射
学生和老师的关系,就是多对多关系,我们可以强制让学生知道老师的信息,而老师不用记住所有所教的学生的信息,这就可以用多对多单向关系
Student_ManyToManySingle
package orm.manytomany.single; import java.io.Serializable; import java.util.List; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToMany; @Entity public class Student_ManyToManySingle implements Serializable { private static final long serialVersionUID = 1L; private long id; private String name; private String sex; private List<Teacher_ManyToManySingle> teachers; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } public String getName() { return name; } public String getSex() { return sex; } @ManyToMany public List<Teacher_ManyToManySingle> getTeachers() { return teachers; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public void setTeachers(List<Teacher_ManyToManySingle> teachers) { this.teachers = teachers; } }
Teacher_ManyToManySingle
package orm.manytomany.single; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Teacher_ManyToManySingle implements Serializable { private static final long serialVersionUID = 1L; private long id; private String name; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } public String getName() { return name; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } }
表结构
5.2多对多双向映射
如果上面的例子让老师也知道他所有学生的信息就可以用多对多双向映射关系来表示
Student_ManyToManyEach
package orm.manytomany.each; import java.io.Serializable; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; @Entity public class Student_ManyToManyEach implements Serializable { private static final long serialVersionUID = 1L; private long id; private String name; private String sex; private List<Teacher_ManyToManyEach> teachers; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } public String getName() { return name; } public String getSex() { return sex; } @ManyToMany(cascade=CascadeType.ALL) @JoinTable( name="StudentsAndTeachers", joinColumns={@JoinColumn(name="studentID")}, inverseJoinColumns={@JoinColumn(name="teacherID")} ) public List<Teacher_ManyToManyEach> getTeachers() { return teachers; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public void setTeachers(List<Teacher_ManyToManyEach> teachers) { this.teachers = teachers; } }
Teacher_ManyToManyEach
package orm.manytomany.each; import java.io.Serializable; import java.util.List; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToMany; @Entity public class Teacher_ManyToManyEach implements Serializable { private static final long serialVersionUID = 1L; private long id; private String name; private List<Student_ManyToManyEach> students; @Id @GeneratedValue(strategy=GenerationType.AUTO) public long getId() { return id; } @ManyToMany(mappedBy="teachers") public List<Student_ManyToManyEach> getStudents() { return students; } public String getName() { return name; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setStudents(List<Student_ManyToManyEach> students) { this.students = students; } }
表结构:
相关推荐
EJB测试题.EJB原理与运行环境,实体 BEAN(ENTITY BEAN)与 ORM 关系对象映射,EJB3.0 QL语言.等
这个项目包括5个实体,这5个实体之间具有复杂的关联关系,而且业务逻辑也相对复杂,希望让读者理论联系实际,真正将jsf+ejb 3+jpa整合真正运用到实际开发中。该案例采用目前最流行、最规范的java ee架构,整个应用...
实体Bean开发样例 ORMTest.zip //07.实体对象映射ORM开发样例 JPQLTest.zip //08.实体查询语言JPQL开发样例 JAASTest.zip //12.JAAS验证与授权服务开发样例 JNDITest.zip //13.JNDI命名和目录服务开发...
实体Bean开发样例 ORMTest.zip //07.实体对象映射ORM开发样例 JPQLTest.zip //08.实体查询语言JPQL开发样例 JAASTest.zip //12.JAAS验证与授权服务开发样例 JNDITest.zip //13.JNDI命名和目录服务开发...
实体Bean开发样例 ORMTest.zip //07.实体对象映射ORM开发样例 JPQLTest.zip //08.实体查询语言JPQL开发样例 JAASTest.zip //12.JAAS验证与授权服务开发样例 JNDITest.zip //13.JNDI命名和目录服务开发...
实体Bean开发样例 ORMTest.zip //07.实体对象映射ORM开发样例 JPQLTest.zip //08.实体查询语言JPQL开发样例 JAASTest.zip //12.JAAS验证与授权服务开发样例 JNDITest.zip //13.JNDI命名和目录服务开发...
ee-7-example 容器配置文件:Wildfly 9.0.0.Final 数据库:MySQL 要使用的Java EE模块: JAX-RS:用于防火CDI:用于注入购物车数据JPA:ORM连接到mysql 使用实现:hiberante 使用缓存提供程序:infinispan EJB:...
199 11.5.1 JMS 200 11.5.2 消息驱动Bean的生命周期 202 11.5.3 创建消息驱动Bean 202 11.6 实体Bean 203 11.6.1 实体Bean的特性 204 11.6.2 实体Bean的分类及组成 204 11.6.3 EJB 3.0中的实体Bean 206 11.7 EJB事务...
第一部分 从Hibernate和EJB 3.0开始 第1章 理解对象/关系持久化 1.1 什么是持久化 1.1.1 关系数据库 1.1.2 理解SQL 1.1.3 在Java中使用SQL 1.1.4 面向对象应用程序中的持久化 1.2 范式不...
1.2.5 域对象之间的关系 1.2.6 域对象的持久化概念 1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM...
类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4. 说下Hibernate的缓存...
53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 34 55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序...
53、线程的基本概念、线程的基本状态以及状态之间的关系 54、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 ...
53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 34 55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序...
53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 34 55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序...
1.2.5 域对象之间的关系 1.2.6 域对象的持久化概念 1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM...
1.2.5 域对象之间的关系 1.2.6 域对象的持久化概念 1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM...
1.2.5 域对象之间的关系 1.2.6 域对象的持久化概念 1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM...
53、线程的基本概念、线程的基本状态以及状态之间的关系 34 54、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 34 55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序...