实体BEAN的七种关系之---------一对一双向
One-to-One Bidirectional Relationship
一对一双向的情况其实在现实生活中也是挺常见的,最常见的就是人和身份证的关系了,我们每个人都有一个身份证(只要你年满16岁,并且申请了),并且每个身份证都对应一个人,我们可以根据一个人查到他的身份证号码,也可以根据一个身份证号码查到一个人的具体情况,(第一代身份证重码的情况还是有的:( ) .好了,闲话不多说,还是看看代码吧.
先定义一个Person类
/*
* Person.java
*
* Created on 2007-9-15, 0:11:58
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package lbf.entitybean.test1;
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.OneToMany;
import javax.persistence.OneToOne;
/**
*
* @author Admin
*/
@Entity
public class Person implements Serializable {
private IDCard idCard;
private static final long serialVersionUID = 1L;
private Long id;
private String name;
private String sex;
private int age;
private Address address;
@OneToOne(cascade=CascadeType.ALL,optional=true)
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setId(Long id) {
this.id = id;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
@OneToOne(cascade={CascadeType.ALL},optional=true)
public IDCard getIdCard() {
return idCard;
}
public void setIdCard(IDCard iDCard) {
this.idCard = iDCard;
}
}
IDCard类
/*
* IDCard.java
*
* Created on 2007-9-18, 17:05:51
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package lbf.entitybean.test1;
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;
/**
*
* @author hadeslee
*/
@Entity
public class IDCard implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private Person person;
private String cardNumber;
public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}
@OneToOne(cascade=CascadeType.ALL,mappedBy="idCard",optional=false)
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public void setId(Long id) {
this.id = id;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
}
在这里我们可以看到一对一单向和一对一双向其实差别也不是很大,无非就是在对方的类里面也定义了一个自己,这样就互相都能找到对方了,在数据表的表现来看,和一对一单向是一模一样的,都是从Person表里面起一个外键连到IDCard的主键.但是只有这种方法吗?
在Person类里面,定义的IDCard注释是和Address一样的,可是我们在IDCard里面定义的注释却和Person里面的不一样:
@OneToOne(cascade=CascadeType.ALL,
mappedBy="idCard",optional=false)
public Person getPerson() {
return person;
}
多了一个mappedBy这个方法,它表示什么呢?它表示此表和Person的关系是定义在Person里面的idCard这个成员上面的,它表示此表是一对一关系中的从表,也就是关系是在person表里面维护的,这一点很重要.
我们也可以让主导权在IDCard上面,也就是让它产生一个指向Person的外键,这也是可以的,但是最好是让 Person来维护整个关系,这样更符合我们正常的思维.
我们也可以看到在Person里面IDCard是注释是optional=true,也就是说一个人是可以没有身份证的,但是一个身份证不可以没有人,所以在IDCard里面注释person的时候,optional就为false了,这样就可以防止一个空的身份证记录进数据库.
分享到:
相关推荐
这个"JSF学习日记"的压缩包文件包含了一个作者在学习过程中创建的实例和所需的JSF库文件,这对于初学者或者希望深入理解JSF的人来说是非常有价值的资源。 JSF的核心概念包括以下几个方面: 1. **组件模型**:JSF...
在本文中,我们将深入探讨一个基于J2EE的OA(办公自动化)项目开发的过程,以及在其中使用的关键技术和工具。...通过分享这些开发日记,作者不仅记录了自己的成长,也为其他开发者提供了一条学习和借鉴的道路。
总的来说,《J2EE OA 开发日记》是学习和理解J2EE在实际项目中的应用的一个宝贵资源,它涵盖了项目开发的各个环节,从理论到实践,为开发者提供了一条清晰的学习路径。通过阅读这份日记,开发者不仅能深化对J2EE技术...
总的来说,这个项目开发日记为读者提供了从理论到实践的全面指导,对于想要了解和学习J2EE环境下OA系统开发的人员来说,是一份宝贵的参考资料。通过阅读这份日记,读者可以了解到一个完整的J2EE项目从无到有,从设计...
### J2EE OA项目开发日记知识点汇总 #### 一、项目背景及技术栈 - **项目名称**: J2EE OA项目(以下简称J2EEOA) - **技术栈**: - Java EE (J2EE): 一种广泛使用的Java企业级开发框架。 - JBoss Application ...
这个开发日记可能详述了每个阶段的具体任务、遇到的问题、解决方案以及最佳实践,对于学习和理解J2EE开发流程具有很高的参考价值。通过阅读这份文档,开发者可以深入了解如何在实际项目中应用上述技术,提高自己的...
【程序员实习日记】这篇文档记录了一位实习程序员在工作中的学习和体验,主要涉及了Java Web开发中的核心技术栈,包括Struts、Spring和Hibernate框架,以及数据库管理和MFC(Microsoft Foundation Classes)库的使用...
《J2EE架构师手册》和《J2EE OA项目开发日记》是两份非常重要的IT资源,专门针对Java企业级应用开发领域的高级技术人员,尤其是对J2EE架构师而言。这两份资料深入探讨了J2EE技术栈,以及在实际OA(办公自动化)项目...
通过阅读这个"Java开发:J2EE OA 项目开发日记",开发者不仅可以学习到具体的编程技巧,还能了解到项目管理、团队协作、问题解决等方面的经验,这对于个人技能提升和实际项目开发有着极大的帮助。
日记中还提到了学习Java编程相关的开源框架——Struts、Spring和Hibernate。这些框架是Java Web开发中的常用工具,它们分别负责不同的职责: 1. Struts是Model2设计模式的一个实现,属于MVC(模型-视图-控制器)...
在提供的文件中,"J2EE OA项目开发日记.doc"很可能记录了整个开发过程的详细日志,包括遇到的问题、解决方案、时间线和项目进度等,对于学习和理解J2EE OA项目的开发流程非常有帮助。而"99java.com.txt"可能是开发者...
通过阅读和学习这份《J2EE OA项目开发日记》,开发者不仅可以了解到一个真实的J2EE项目是如何运作的,还能提升在项目管理、需求分析、系统设计、数据库管理和团队协作等方面的能力。对于想进入企业级应用开发领域的...
【知识点详解】 1. **Java Web开发框架**:实习日记提到了Struts、Spring和Hibernate,这是Java Web开发中常见的三大框架。...通过实习日记,我们可以看到一个软件员从理论学习到实践应用的过程,以及问题解决的思路。
此外,《Enterprise JavaBeans》一书提供了关于企业级Java应用的重要知识,特别是对于那些希望掌握EJB框架的人来说。 #### 应用服务器的选择与学习 对于想要进行更深层次的企业级Java应用开发的开发者来说,选择...
**JSP(Java Server Pages)**是Java平台上用于创建动态网页的一种技术,它结合了HTML、脚本语言(如JavaScript)和Java代码,使得开发者可以...通过阅读"JSP学习日记",你可以逐步了解这些概念,并通过实践提升技能。
6. **EJB(Enterprise JavaBeans)**:虽然现代JavaEE应用更多使用轻量级框架如Spring,但了解EJB的基本概念也是有益的,特别是Session Beans和Entity Beans。 7. **Web容器**:如Tomcat或Jetty,这些容器负责部署...
9 10 2.9 数组(1) 一维数组的声明、初始化和使用 ```java int[] array = new int[5]; array[0] = 1; array[1] = 2; //... System.out.println(array[0]); // 输出 1 ``` (2) 二维数组的声明、初始化和使用 ```java ...
后端可以使用Ejb、Spring、IOC、AOP、JMS、JNDI、RMI等技术来实现。 4. 什么是SOA、ROA?谈谈两种技术的原理及合用场景 SOA(Service-Oriented Architecture)是一种软件架构风格,强调服务之间的松耦合和自治性。...
9. **未来趋势**: 随着微服务架构的兴起,Java EE也在不断演进,现在被称为Jakarta EE,由Eclipse基金会维护,旨在提供更轻量级、云原生的解决方案,如Quarkus、Helidon等框架。 综上所述,"Java EE开发包"包含了...