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

Java Persistence API 实体映射的方向问题

阅读更多
EJB3.0包含了JPA,Java持久性接口。JPA接口其中一个重要部分就是ORM,就是对象和关系的映射,也被成为实体映射。
实体映射中存在方向问题:单向关系和双向关系。

单向关系:两个实体中只有一个实体指向另一个实体(知道该关系的存在),而另一实体没有指向这个实体(另一实体不知道该关系的存在)
例如 如果将人和地址建模如下:Person ---------> Address,就是单向关系.
数据库表:PERSON(id,name,...,address),ADDRESS(id,country,city,street,building,...)
其中PERSON表中的address是外键,即为ADDRESS表中的id,只有PERSON知道关系的存在(能从Person导向Address)
而ADDRESS不知道PERSON(无法从Address导向Person)
在单向关系中只有拥有端知道关系的存在,即Person就是拥有端(Person拥有这个关系,看箭头方向)
在单向关系中,有外键的即为拥有端。

双向关系包括拥有端(Owning Side)和反向端(Inverse Side),而单向关系只有拥有端。

拥有端决定持久性如何进行数据库中关系的更新(就是表更新)。

双向关系

在双向关系中,每个实体拥有一个指向另一个实体的字段或者属性。通过这个字段或者属性,一个实体类能够访问其相联系的对象。如果一个实体拥有相联系的字段,我们说,这个实体知道相联系的对象。例如如果订单知道它拥有的每个订货商品,并且每个订货商品知道它从属的订单,我们说,订单和订货商品拥有双向关系。

双向关系必须遵循下列规则:
  • 双向关系的反向端(Inverse Side)必须通过@OneToOne,@OneToMany,@ManyToMany注释的mappedBy元素来指定其拥有端(Owning Side)。这个元素指明这个关系的拥有者实体的属性或者字段。
  • 多对一或者多对多的多的那一端,不能定义mappedBy元素。多的那一端永远是关系中的拥有端。例如雇员和部门一般是双向多对一的关系,所以多的那一端,也就是雇员,不能定义mappedBy元素,雇员永远是雇员和部门关系的拥有端。
  • 对于一对一的双向关系,拥有外键的那一端是拥有端。
  • 对于多对多的双向关系,任何一端都可以是拥有端。
单向关系

在单向关系中,只有一个实体拥有指向另一个实体的相关字段或属性,而另一个实体没有指回来的字段或属性。例如订货商品(即已经放入购物车的商品)拥有一个指向产品的字段,但是产品没有指向订货商品的字段。也就是说,订货商品知道自己属于那种产品,但是产品不知道哪一个订货商品指向了自己。

查询和方向

JPA的查询语言经常跨越关系,关系的方向性决定查询能够从一个实体到另一个实体。例如一个查询能够从订货商品跨越到产品,反过来却不行。但是订单和订货商品却可以双向导航。

级联删除和关系

有些实体是相互依赖的。例如订货商品是订单的一部分,如果订单被取消了,订货商品也应该被删除。这被称为级联删除。
例如,如果消费者被删除了,其订单也就没有了:
@OneToMany(cascade=REMOVE, mappedBy="customer") //一个消费者对应多个订单,多的那一端是订单,订单表中的customer字段为mappedBy元素
public Set<order> getOrders() { return orders; }//设置级联删除,如果消费者被删了,订单也被删了。</order>
分享到:
评论

相关推荐

    Java Persistence API 2.0-final-spec

    Java持久化API(Java Persistence API,简称JPA)是Java平台上的一个标准,用于管理和持久化应用程序中的对象。它是Java Enterprise Edition(Java EE)的一部分,同时也适用于Java Standard Edition(Java SE)环境...

    [课堂课件讲解]Java微服务实践-Spring Boot Java Persistence API.pptx

    Java Persistence API是一种强大的Java持久化API,提供了一个标准的、可移植的、基于对象关系映射(ORM)的持久化机制。Spring Boot Java Persistence API是Spring Boot框架中的一部分,提供了一个简洁的方式来使用...

    Java Persistence API

    为了解决上述问题,Java Persistence API 应运而生,旨在提供一种更简洁、统一的数据持久化方案。 ##### **2.1 设计理念** - **简化开发**:JPA的设计目标之一是简化数据持久化开发过程,使开发者能够更加专注于...

    JPA (Java Persistence API)

    Java Persistence API(JPA)是Java平台上的一个标准,用于管理和持久化对象。它为Java开发者提供了一种规范化的机制来映射Java对象到关系数据库,使得在数据库操作中可以使用面向对象的方式来处理数据。JPA通过ORM...

    APress Pro EJB 3 Java Persistence API

    Java Persistence API是一种用于Java应用的持久层标准,它定义了对象关系映射(ORM)的API,允许开发者将Java对象映射到关系数据库表,并提供了对象查询语言(JPQL)。JPA的主要优势在于其标准化,使得开发者能够在...

    Java Persistence API 2.0 FINAL文档

    Java Persistence API (JPA) 2.0是一个用于管理持久性和对象/关系映射的Java API,适用于Java EE和Java SE环境。其主要目标是为Java应用开发者提供一个使用Java域模型来管理关系数据库的对象/关系映射设施。 在JPA ...

    JPA(Java Persistence API) JPA中文教程

    **Java Persistence API (JPA)** 是Java平台上的一个核心组件,它定义了应用程序与数据库之间的对象关系映射(ORM)规范。ORM允许开发者使用面向对象的编程语言来操作数据库,而不是直接编写SQL语句,从而简化了数据...

    Pro EJB 3 Java Persistence API.pdf

    Java Persistence API (JPA) 是一种Java规范,用于管理持久层对象的状态,它提供了一种对象关系映射(ORM)机制,允许开发者以面向对象的方式来处理数据库记录。JPA的主要特点包括: 1. **对象关系映射**:通过ORM,...

    Pro JPA 2 Mastering the Java Persistence API

    《Pro JPA 2 Mastering the Java Persistence API》是一本深度探讨Java持久化技术的专业书籍,专注于Java Persistence API(JPA)2.0版本。JPA是Java平台上的一个标准,用于管理关系数据库中的对象持久化,是企业级...

    Pro EJB 3 Java Persistence API

    《Pro EJB 3 Java Persistence API》是一本深入探讨企业级Java应用开发的专业书籍,主要聚焦于EJB 3.0版本中的Java Persistence API(JPA)。EJB(Enterprise JavaBeans)是Java EE平台的核心组件之一,用于构建可...

    Pro JPA 2 Mastering the Java Persistence API free down

    JPA2.0 加入了大量必须的 ORM 映射增强特性,包括:支持通过使用 @ElementCollection 标注来增强 collections, maps 和 lists( 这里不是指实体之间的关联关系 ) 集合,支持 map 的单向 one-to-many 关联 (JPA1.0...

    Pro JPA 2 Mastering the Java Persistence API 2009.pdf

    - **JPA**(Java Persistence API)是一种用于 Java 应用程序的对象关系映射 (ORM) 规范,它为持久化层提供了一种机制来存储和检索应用程序对象的状态。 - **发展历史**:JPA 的第一个版本发布于 2006 年,自那时...

    Java Persistence API(EJB3.0中的 JPA 规范说明)

    #### 实体映射机制 - **基本注解**:为了简化实体的定义和数据库表之间的映射,JPA 提供了一系列注解。例如,`@Entity` 表示类是一个实体;`@Table` 指定实体对应的数据库表;`@Id` 标识主键字段等。 - **关系映射*...

    java persistence API--qpupdate

    Java持久化API(Java Persistence API,简称JPA)是Java平台上的一个标准,用于管理和操作对象-关系映射(Object-Relational Mapping,ORM)。它为应用程序提供了一种规范化的接口,来处理数据库的存储和检索,使得...

    来自Java Persistence With Hibernate的示例

    Java Persistence API(JPA)是Java EE平台的一部分,它为Java开发者提供了一种标准的方式来管理对象-关系映射(ORM)。JPA允许我们将Java对象映射到数据库表,从而简化了数据库操作,减少了与SQL的直接交互。 ...

    The Java™ Persistence API

    ### Java™ Persistence API 在 Web 层的关键概念与应用 #### 引言 Java™ Persistence API (JPA) 是一种用于管理 Java 应用程序中对象持久化的标准接口。它最初作为简化 Enterprise JavaBeans (EJB) 实体 Bean 的...

Global site tag (gtag.js) - Google Analytics