实体BEAN的七种关系之---------一对一单向
一对一单向,顾名思义,就是只要求从A方到达B方,而不需要从B方到达A方,典型的例子就是,一个人对应一个地址,因为现实生活中,一个地址可能住很多人,所以一般我们只需要根据人查到它的地址,而不太会需要从一个地址去查谁住在那里,不过,真的有这种需求的话,我们就要以用另外一种关系来实现了,这个以后再讲
首先我们声明一个人的实体类,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 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;
}
}
再来看看Address的实体BEAN定义
/*
* Address.java
*
* Created on 2007-9-15, 0:13:50
*
* 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.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
/**
*
* @author Admin
*/
@Entity
public class Address implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String country,province,city,street;
private int postcode;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public int getPostcode() {
return postcode;
}
public void setPostcode(int postcode) {
this.postcode = postcode;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public void setId(Long id) {
this.id = id;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
}
以上便是两个类的定义,从Person里面我们可以看到如下的代码
@OneToOne(cascade=CascadeType.ALL,optional=true)
public Address getAddress() {
return address;
}
在这里的@OneToOne就是注释是一对一的关系,其中cascade是表示级联的关系,是级联删除还是级联更新,还是所有,我们这里选择的是所有,这样的好处就是,我们在插入Person的时候,就顺带的把Person里面包含的Address一起插入数据库里面,当我们删除Person的时候,也是把这个Person对应的Address从数据库里面删除,否则就需要我们人工的删除两遍或者插入两遍等等,optional表示这个成员是不是可选的,我们这里是可选的,也就是说一个人可以没有地址(比如流浪汉:)).
然后我们发现,在Address里面只有一些简单的EntityBean的注释,并没有表示关系的注释,这是因为本例是一对一单向的实现,Person里面有 Address,而Address却什么都不知道,它对应到数据库里面只是一张简单的表而已,Person对应到数据库里面就有一个指向Address的外键.我们也可以增加注释指定外键的列的名字,如下:
@OneToOne(cascade=CascadeType.ALL,optional=true)
@JoinColumn(name="addressID")
public Address getAddress() {
return address;
}
如果我们不加的话,也是可以通过的,在JBOSS里面,它会自动帮你生成你指向这个类的类名加上下划线再加上id的列,也就是默认列名是:address_id.
如果是主键相关联的话,那么可以运用如下注释
@OneToOne(cascade={CascadeType.ALL})
@PrimaryKeyJoinColumn
public Address getAddress( ) {
return homeAddress;
}
它表示两张表的关联是根据两张表的主键的
以下是一些注释的定义,我们看一下可以了解一下这些注释有哪些方法,
public @interface JoinColumn
{
String name( ) default "";
String referencedColumnName( ) default "";
boolean unique( ) default false;
boolean nullable( ) default true;
boolean insertable( ) default true;
boolean updatable( ) default true;
String columnDefinition( ) default "";
String table( ) default "";
}
public @interface OneToOne
{
Class targetEntity( ) default void.class;
CascadeType[] cascade( ) default {};
FetchType
fetch( ) default EAGER;
boolean optional( ) default true;
String mappedBy( ) default "";
}
public @interface PrimaryKeyJoinColumn
{
String name( ) default "";
String referencedColumnName( ) default "";
String columnDefinition( ) default "";
}
好了,一对一单向差不多就这么些吧,明天再看一下一对一双向的情况.
分享到:
相关推荐
这个"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,这些容器负责部署...
8 9 10 2.9 数组(1) 一维数组的声明、初始化和使用 ```java int[] array = new int[5]; array[0] = 1; array[1] = 2; //... System.out.println(array[0]); // 输出 1 ``` (2) 二维数组的声明、初始化和使用 ```...
7、8. 谈谈架构师的职责有哪些?软件设计领域,有哪些设计模式? 架构师的职责包括软件设计、系统架构、项目管理等。软件设计领域的设计模式包括工厂模式、观察者模式、单例模式等,各有其优缺点和应用场景。 9. ...
8. **最佳实践**: 在开发过程中,应遵循良好的编程习惯,如使用注解减少XML配置,利用IDE(如IntelliJ IDEA或Eclipse)提高开发效率,利用单元测试确保代码质量,以及利用持续集成工具自动化构建和部署。 9. **...