JPA OneToOne,OneToMany和ManyToMany的mappedBy属性

在四种关联关系OneToOne,OneToMany,ManyToOne和ManyToMany中,只有OneToOne、OneToMany和ManyToMany这三中关联关系有mappedBy属性。

下面是mappedBy属性在java doc里边的解释:

the field that owns the relationship. Required unless the relationship is unidirectional.

翻译成中文是:

拥有关联关系的域,如果关系是单向的就不需要。

那么什么叫拥有关联关系呢,可以这么认为,假设是双向一对一的话,那么拥有关系的这一方有建立、解除和更新与另一方关系的能力,而另一方没有,只能被动管理;在双向一对多和双向多对多中是一个意思。

由于JoinTable和JoinColumn一般定义在拥有关系的这一端,而Hibernate又不让mappedBy跟JoinTable和JoinColumn定义在一起,所以mappedBy一定是定义在关系的被拥有方,the owned side,也就是跟定义JoinTable和JoinColumn互斥的一方,它的值指向拥有方中关于被拥有方的字段,可能是一个对象(OneToMany),也可能是一个对象集合(ManyToMany)。

关系的拥有方负责关系的维护,在关系拥有方建立外键,所以JoinTable和JoinColumn都是定义在关系拥有方。

另外mappedBy有一个功能就是,加入这个属性之后,可以避免自动生成中间表。

最后,mappedBy=“xxx”,可以这么理解,mappedBy定义在关系的被拥有方,mappedBy定义所在的类(不管是单个还是集合的形式)在关系拥有者那一方的名称是“xxx”。

时间: 2024-08-05 02:55:26

JPA OneToOne,OneToMany和ManyToMany的mappedBy属性的相关文章

Django基础四<二>(OneToMany和 ManyToMany,ModelForm)

上一篇博文是关于setting.py文件数据库的配置以及model与数据库表关系,实现了通过操作BlogUser,把BlogUser的信息存入后台数据库中.实际开发中有许多东西是相互联系的,除了数据的显示和存储之外,我们也要理清各种数据对象之间的关系.Django框架定义了三种关系模型: OneToOne OneToOne(一对一) :这种对应关系最简单,就是字面的意思一对一.django用OneToOneField来表示这种对应关系. OneToMany OneToMany(一对多) :也是常

。。。Hibernate中mappedBy属性。。。

今天在学习Hibernate中,感觉这个mappedBy这个注解属性有点小难度.不过理解之后,还是阔以的! 首先,mappedBy这个注解只能够用在@OntToOne,@OneToMany,@manyToMany中,不能够用在@manyToOne中: 第二,这个注解看网上的意思可以简单地理解为:这个注解用在主表的一方,就是被引用的一方: 第三,这个注解是与@JoinColumn这个注解是互斥的,因为@JoinColumn这个注解使用在拥有外键的表的一方,就是从表的一方. 第四,这个注解的属性值是

JPA(Hibernate) @OneToMany 两种例子

环境:Spring Data Jpa,hibernate或者其他jpa实现也是一样的:Spring Boot 场景:User和Role,一个User要对应多个Role. 第一种方式,没有中间关系表,直接在role表中添加一个user_id字段 User: import javax.persistence.*; import javax.validation.constraints.NotNull; import java.util.HashSet; import java.util.Set; /

jpa/hibernate @onetomany 使用left join 添加多条件,可以使用过滤器filters (with-clause not allowed on fetched associations; use filters异常信息)

package com.ipinyou.mip.dataAsset.campaignManagement.entity; import com.ipinyou.mip.utils.NumberUtils; import com.ipinyou.mip.utils.StringHelper; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.apache.commons.l

JPA#OneToOne

无力吐槽. 一对一,一个人有一个身份证号码.一个人有一条命,类似于这一种的就是一对一的关系. 涉及到的注解两个: OneToOne JoinColumn( name="当前实体对应数据库表中的字段名称,这个字段是一对一关系中对方的主键,这个字段是本表中的外键", referencedColumnName="这是个数据库表的字段名称,字段为当前表的外键所对应的另外一张表的主键" ) 举一个例子:一个学生有一个桌子 @Entity @Table(name="t

hibernate4多对多Use of @OneToMany or @ManyToMany targeting an unmapped class:

出错之后先查了一下,大家有 @Entity 导错包的,不过我这里没错 import javax.persistence.Entity; 就是这个 还有的是没有注解@Table的,我这里也是没问题的 我这个问题就比较厉害了,忘记把另一个类加到hibernate的配置文件去了 添加上之后,问题解决 原文地址:https://www.cnblogs.com/jnhs/p/11439486.html

@OneToMany、@ManyToOne以及@ManyToMany讲解

一.一对多(@OneToMany)1.单向一对多模型假设通过一个客户实体可以获得多个地址信息.对于一对多的实体关系而言,表结构有两种设计策略,分别是外键关联和表关联.(1) 映射策略---外键关联在数据库中表customer和表结构address定义,如下: create table customer (  id int(20) not null auto_increment,  name varchar(100),  primary key(id)) create table address

JPA(4)表表关联关系

在我们做数据库设计的时候,最烦的就是各种表之间的关联关系了,关联关系有:一对多,多对一,一对一,其中还有单向和双向的区别. 1.双向一对多及多对一映射:既然是双向,那么就是同一类的了:双向一对多关系中,必须存在一个关系维护端,在 JPA 规范中,要求 many 的一方作为关系的维护端(owner side), one 的一方作为被维护端(inverse side). 可以在 one 方指定 @OneToMany 注释并设置 mappedBy 属性,以指定它是这一关联中的被维护端,many 为维护

JPA的常用Annotation

http://www.blogjava.net/zJun/archive/2007/01/24/95747.html 1. @Entity:通过@Entity注解将一个类声明为一个实体bean @Table(name=”t_Husband”):通过 @Table注解可以为实体bean映射指定表,name属性表示实体所对应表的名称,如果没有定义 @Table,那么系统自动使用默认值:实体的类名(不带包名) 2. @Id:用于标记属性的主键 @GeneratedValue(默认取值anto,ID生成