`
lbfhappy
  • 浏览: 83213 次
社区版块
存档分类
最新评论

EJB学习日记(8)

阅读更多

实体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(Java Server Faces)学习日记

    这个"JSF学习日记"的压缩包文件包含了一个作者在学习过程中创建的实例和所需的JSF库文件,这对于初学者或者希望深入理解JSF的人来说是非常有价值的资源。 JSF的核心概念包括以下几个方面: 1. **组件模型**:JSF...

    J2EE OA项目开发日记

    在本文中,我们将深入探讨一个基于J2EE的OA(办公自动化)项目开发的过程,以及在其中使用的关键技术和工具。...通过分享这些开发日记,作者不仅记录了自己的成长,也为其他开发者提供了一条学习和借鉴的道路。

    j2ee OA 开发日记

    总的来说,《J2EE OA 开发日记》是学习和理解J2EE在实际项目中的应用的一个宝贵资源,它涵盖了项目开发的各个环节,从理论到实践,为开发者提供了一条清晰的学习路径。通过阅读这份日记,开发者不仅能深化对J2EE技术...

    j2ee oa 项目开发日记

    总的来说,这个项目开发日记为读者提供了从理论到实践的全面指导,对于想要了解和学习J2EE环境下OA系统开发的人员来说,是一份宝贵的参考资料。通过阅读这份日记,读者可以了解到一个完整的J2EE项目从无到有,从设计...

    【J2EE OA】 项目开发日记.docx

    ### J2EE OA项目开发日记知识点汇总 #### 一、项目背景及技术栈 - **项目名称**: J2EE OA项目(以下简称J2EEOA) - **技术栈**: - Java EE (J2EE): 一种广泛使用的Java企业级开发框架。 - JBoss Application ...

    J2EE OA项目开发日记.rar

    这个开发日记可能详述了每个阶段的具体任务、遇到的问题、解决方案以及最佳实践,对于学习和理解J2EE开发流程具有很高的参考价值。通过阅读这份文档,开发者可以深入了解如何在实际项目中应用上述技术,提高自己的...

    程序员实习日记.docx

    【程序员实习日记】这篇文档记录了一位实习程序员在工作中的学习和体验,主要涉及了Java Web开发中的核心技术栈,包括Struts、Spring和Hibernate框架,以及数据库管理和MFC(Microsoft Foundation Classes)库的使用...

    j2EE架构师手册+J2EE OA 项目开发日记

    《J2EE架构师手册》和《J2EE OA项目开发日记》是两份非常重要的IT资源,专门针对Java企业级应用开发领域的高级技术人员,尤其是对J2EE架构师而言。这两份资料深入探讨了J2EE技术栈,以及在实际OA(办公自动化)项目...

    Java开发:J2EE OA 项目开发日记

    通过阅读这个"Java开发:J2EE OA 项目开发日记",开发者不仅可以学习到具体的编程技巧,还能了解到项目管理、团队协作、问题解决等方面的经验,这对于个人技能提升和实际项目开发有着极大的帮助。

    计算机实习日记 (2).pdf

    日记中还提到了学习Java编程相关的开源框架——Struts、Spring和Hibernate。这些框架是Java Web开发中的常用工具,它们分别负责不同的职责: 1. Struts是Model2设计模式的一个实现,属于MVC(模型-视图-控制器)...

    J2EE OA 项目开发日记简介

    在提供的文件中,"J2EE OA项目开发日记.doc"很可能记录了整个开发过程的详细日志,包括遇到的问题、解决方案、时间线和项目进度等,对于学习和理解J2EE OA项目的开发流程非常有帮助。而"99java.com.txt"可能是开发者...

    j2ee oa项目开发日记.rar_J2EE_J2EE 项目_数据库 人力资源_项目 文档_项目开发 文档

    通过阅读和学习这份《J2EE OA项目开发日记》,开发者不仅可以了解到一个真实的J2EE项目是如何运作的,还能提升在项目管理、需求分析、系统设计、数据库管理和团队协作等方面的能力。对于想进入企业级应用开发领域的...

    计算机软件员工作实习日记.pdf

    【知识点详解】 1. **Java Web开发框架**:实习日记提到了Struts、Spring和Hibernate,这是Java Web开发中常见的三大框架。...通过实习日记,我们可以看到一个软件员从理论学习到实践应用的过程,以及问题解决的思路。

    如何学习Java技术

    此外,《Enterprise JavaBeans》一书提供了关于企业级Java应用的重要知识,特别是对于那些希望掌握EJB框架的人来说。 #### 应用服务器的选择与学习 对于想要进行更深层次的企业级Java应用开发的开发者来说,选择...

    jsp学习笔记

    **JSP(Java Server Pages)**是Java平台上用于创建动态网页的一种技术,它结合了HTML、脚本语言(如JavaScript)和Java代码,使得开发者可以...通过阅读"JSP学习日记",你可以逐步了解这些概念,并通过实践提升技能。

    大二下--暑期见习作业(要求+code)-shang学堂

    6. **EJB(Enterprise JavaBeans)**:虽然现代JavaEE应用更多使用轻量级框架如Spring,但了解EJB的基本概念也是有益的,特别是Session Beans和Entity Beans。 7. **Web容器**:如Tomcat或Jetty,这些容器负责部署...

    java培训实习报告

    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) 二维数组的声明、初始化和使用 ```...

    (完整版)Java系统架构师面试题 (2).docx

    7、8. 谈谈架构师的职责有哪些?软件设计领域,有哪些设计模式? 架构师的职责包括软件设计、系统架构、项目管理等。软件设计领域的设计模式包括工厂模式、观察者模式、单例模式等,各有其优缺点和应用场景。 9. ...

    Java EE 开发包

    8. **最佳实践**: 在开发过程中,应遵循良好的编程习惯,如使用注解减少XML配置,利用IDE(如IntelliJ IDEA或Eclipse)提高开发效率,利用单元测试确保代码质量,以及利用持续集成工具自动化构建和部署。 9. **...

Global site tag (gtag.js) - Google Analytics