什么是实体映射--多重映射???
发布网友
发布时间:2022-04-06 07:46
我来回答
共1个回答
热心网友
时间:2022-04-06 09:15
我以为你指的是hibernate 实体类映射,也就是表之间关联映射
百度Hi你 也不回话
下面是关于ORM实体映射实例及说明:
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>
关于hibernate 类关联映射
周一到周六工作日可以Hi我 可以口述给你 太晚了 要下班了 先撤了。。。