`
david01205
  • 浏览: 86739 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jpa 一对一(转载)

 
阅读更多
原文地址:http://www.blogjava.net/justfang/archive/2009/11/05/301285.html
一对一(One-To-One)
使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3).通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上添加唯一约束)。
1.共享主键的一对一关联映射:
@Entity
@Table(name="Test_Body")
public class Body {
   private Integer id;
   private Heart heart;
  
   @Id
   public Integer getId() {
      return id;
   }
  
   public void setId(Integer id) {
      this.id = id;
   }

   @OneToOne
   @PrimaryKeyJoinColumn
   public Heart getHeart() {
      return heart;
   }

   public void setHeart(Heart heart) {
      this.heart = heart;
   }
}

@Entity
@Table(name="Test_Heart")
public class Heart {
   private Integer id;
   @Id
   public Integer getId() {
      return id;
   }

   public void setId(Integer id) {
      this.id = id;
   }
}

通过@PrimaryKeyJoinColumn批注定义了一对一关联

2.使用外键进行实体一对一关联:
@Entity
@Table(name="Test_Trousers")
public class Trousers {
   @Id
   public Integer id;
   @OneToOne
   @JoinColumn(name = "zip_id")
   public TrousersZip zip;
}

@Entity
@Table(name="Test_TrousersZip")
public class TrousersZip {
   @Id
   public Integer id;
   @OneToOne(mappedBy = "zip")
   public Trousers trousers;
}

上面的例子是指Trousers通过Trousers的外键列zip_id和TrousersZip关联,@JoinColumn批注定义了联接列,该批注和@Column批注有点类似,但是多了一个名为referencedColumnName的参数。该参数定义了所关联目标实体中的联接列,注意,当referencedColumnName关联到非主键列的时候,关联的目标类必须实现Serializable,还要注意的是所映像的属性对应单个列(否则映射无效)
一对一关联可能是双向的,在双向关联中,有且仅有一端作为主体(owner)端存在:主体端负责维护联接列(即更新),对于不需要维护这种关系的从表则通过mappedNy属性进行声明。mappedBy的值指向主体的关联属性。例子中,mappedBy的值为zip。最后,不必也不能再在被关联端(ownedside)定义联接列了,因为已经在主体端声明了。
如果在主体没有声明@JoinColumn,系统自动进行处理:在主表(owner table)中将创建联接列,列名为:主体的关联属性名+下划线+被关联端的主键列名。上面的例子中是zip_id,因为Trousers中的关联属性名为zip,TrousersZip的主键是id。

3.通过关联表定义一对一关联
@Entity
@Table(name="Test_People")
public class People {
   @Id
   public Integer id;
   @OneToOne
   @JoinTable(name ="TestPeoplePassports",
     joinColumns = @JoinColumn(name="perple_fk"),
     inverseJoinColumns = @JoinColumn(name="passport_fk")
   )
   public Passport passport;
}

@Entity
@Table(name="Test_Passport")
public class Passport {
   @Id
   public Integer id;
   @OneToOne(mappedBy = "passport")
   public People people;
}
People通过名为TestPeoplePassports的关联表和Passport关联。该关联表拥有名为passport_fk的外键列,该外键指向Passport表,该信息定义为inverseJoinColoumns的属性值,而people_fk外键列指向People表,该信息定义为joinColumns的属性值。
这种关联可能是双向的,在双向关联中,有且仅有一端作为主体(owner)端存在:主体端负责维护联接列(即更新),对于不需要维护这种关系的从表则通过mappedNy属性进行声明。mappedBy的值指向主体的关联属性。例子中,mappedBy的值为passport。最后,不必也不能再在被关联端(ownedside)定义联接列了,因为已经在主体端声明了。
分享到:
评论

相关推荐

    WebSphere6.1与SSH2+JPA2不兼容问题解决

    ### WebSphere6.1与SSH2+JPA2不兼容问题解决 #### 一、引言 随着技术的发展,软件架构也在...希望本文能帮助到需要在WebSphere 6.1上部署SSH2架构程序的朋友,如果觉得本文对你有所帮助,请在转载时注明原文出处。

    华为面试试题,很经典,转载

    【标题】华为面试试题,很经典,转载 在IT行业中,华为作为全球领先的信息与通信技术(ICT)解决方案供应商,其面试题目往往被视为衡量技术能力的重要标准。这些经典的面试问题涵盖了多个领域,不仅测试候选人的专业...

    JAVA OA平台源码(转载)SPRING BOOT....

    【标题】:“JAVA OA平台源码(转载)SPRING BOOT...” 这个开源项目是一个基于Java技术的OA(Office Automation)管理系统的源代码实现,利用了Spring Boot框架进行开发。Spring Boot是Spring生态中的一个核心组件...

    Tomcat 7-9转载资源

    - **Java EE 8支持**:兼容Java EE 8,包括JSF 2.3、CDI 2.0、JPA 2.2等标准。 在Windows环境下,提供了x64和x86两种版本,分别对应64位和32位操作系统。对于64位系统,x64版本通常能更好地利用硬件资源,提高性能...

    【转载 见附件】纵观jBPM:从jBPM3到jBPM5以及Activiti5

    "【转载 见附件】纵观jBPM:从jBPM3到jBPM5以及Activiti5" 这个标题表明这是一个关于jBPM发展历程的综合分析,涵盖了从jBPM3到jBPM5的变迁,并且提到了Activiti5,这是一款与jBPM相关的流程管理框架。标题暗示了文章...

    jsr168 portlet(struts2+spring2.5+hibernate3.3)(转载)

    Hibernate 3.3版本引入了对JPA的支持、增强了性能和查询能力。 这个项目可能是为了展示如何在portlet环境下,使用Struts2处理前端请求,Spring管理业务逻辑和依赖,以及Hibernate处理数据库操作。开发者可能通过...

    【转载】java实现的局域网聊天软件

    【Java 实现局域网聊天软件...综上所述,构建一个Java实现的局域网聊天软件涉及众多技术,包括Java网络编程、多线程、IO流、Spring Boot框架、WebSocket、JSON数据交换等,开发者需要对这些知识有深入理解和实践能力。

    本项目是基于SpringBoot的线上宠物物资购买系统,为个人毕业设计,未经允许禁止转载.zip

    【描述】提到这是个人的毕业设计,这意味着这个项目可能是一个学生在完成学业时所构建的应用,旨在展示他们对软件开发的理解和技能,特别是关于Web应用程序和SpringBoot的掌握。毕业设计通常要求独立完成,涉及需求...

    intellij-idea教程

    特别是对Maven的单模块或多模块项目,如何结合Spring MVC、Spring、Mybatis和Spring Data JPA等框架进行详细介绍。 为了提升工作效率,教程特别讲解了IntelliJ IDEA的常用设置、快捷键的使用,并且对于Windows转Mac...

    JAVA文章精选542个(txt) 免费分享

    可能涉及JPA(Java Persistence API)或Hibernate等框架,讲解如何创建实体类,配置映射文件,以及执行CRUD操作。 2. **转:第一部分:EJB 体系结构的历史和目标.txt**: EJB(Enterprise JavaBeans)是Java EE...

    SpringMVC-Hibernate:J2EE项目系列(二)-博客管理系统(Maven + SpringMVC + Hibernate以及附加分页和一对多查询功能)

    J2EE项目系列(二)-博客管理系统(Maven + SpringMVC + Hibernate以及附加分页和一对多查询功能)大家在使用过程中,可先阅读我的博客会有更好的理解。转载请注明:【JackFrost的博客】更多内容,可以访问喜欢就给...

Global site tag (gtag.js) - Google Analytics