最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

JPA注解关联关系

来源:动视网 责编:小OO 时间:2025-09-30 20:59:29
文档

JPA注解关联关系

JPA注解规范1.每一个持久化POJO类都是一个实体Bean,这可以通过在类的定义中是@Entity注解来进行声明:2.定义表(Table),@Table是类一级的注解,通过@Table注解可以为实体bean映射指定表(table),如果没有定义@Table,那么系统自动使用默认值.在@Table注解中,如果需要可以指定相应的值,结合使用@UniqueConstraint注解可以定义表的唯一约束3.基本属性映射实体bean中所有的非静态属性(static)和临时属性(Transient)属性都
推荐度:
导读JPA注解规范1.每一个持久化POJO类都是一个实体Bean,这可以通过在类的定义中是@Entity注解来进行声明:2.定义表(Table),@Table是类一级的注解,通过@Table注解可以为实体bean映射指定表(table),如果没有定义@Table,那么系统自动使用默认值.在@Table注解中,如果需要可以指定相应的值,结合使用@UniqueConstraint注解可以定义表的唯一约束3.基本属性映射实体bean中所有的非静态属性(static)和临时属性(Transient)属性都
JPA注解规范

1.每一个持久化POJO类都是一个实体Bean,这可以通过在类的定义中是@Entity注解来进行声明:

2.定义表(Table),@Table是类一级的注解,通过@Table注解可以为实体bean映射指定表(table),如果没有定义@Table,那么系统自动使用默认值.

在@Table注解中,如果需要可以指定相应的值,结合使用@UniqueConstraint注解可以定义表的唯一约束

3.基本属性映射

实体bean中所有的非静态属性(static)和临时属性(Transient)属性都可以被持久化,除非将其注解为@Transient.所有没有定义注解的属性等价于在其上面添加了@Basic注解.通过@Basic注解可以声明属性的获取策略(fetch strategy):

对于简单属性来说.默认的获取方式是即时获取(early fetch).当一个实体Bean的实例被创建时,Hibernate会将这些属性的值从数据库中提取出来,保存到Bean的属性里.与即时获取相对应的是延迟获取(lazy fetch).如果一个属性的获取方式是延迟获取,Hibernate在创建一个实体Bean的实例时,不会即时将这个属性的值从数据库中读出.只有在该实体Bean的这个属性第一次被调用时,Hibernate才会去获取对应的值.通常不需要对简单属性设置延迟获取(lazy simple property),注意:千万不要和延迟关联获取(lazy association fetch)混淆了.为了实现延迟加载功能必须实现serializable接口.

4.列属性声明

使用@Column注解可将属性映射到列:

5.继承关联映射

JPA通过Inheritance annotation提供了几种继承策略[InheritanceType strategy:用来声明继承策略]:

InheritanceType.SINGLE_TABLE(缺省值)

⏹为类的继承体系采用同一个表

InheritanceType.JOINED

⏹为类继承体系中的每个类创建不同的表

InheritanceType .TABLE_PER_CLASS

⏹类继承体系中的每个类创建不同的表

6.从父类继承属性

通过一个父类共享一些公共属性,同时还不用将该父类作为映射的实体,这时可以使用@MappedSuperclass注解来进行映射

7.映射实体Bean的关联关系

8.关联关系从实体的数量上分为:

a)一对一,用@OneToOne注解

b)一对多,用@OneToMany注解

c)多对一,用@ManyToOne注解

d)多对多,用@ManyToMany注解

e)一对一(One-to-One)======>单项关联

以客户实体(CustomerEO)与地址实体(AddressEO)为例来说明如何映射一对一关系

映射

使用@OneToOne注解可以建立实体bean之间的一对一的关联.一对一关联有三种

情况:1.关联的实体共享同样的主键;2.其中一个实体通过外键关联到另一个实体的

主键;3.通过关联表来保存两个实体之间的连接关系(注意要模拟一对一关联必须在

外键列上添加唯一约束)

单向关联:

一个客户对应一个地址,通过客户可以获得该客户的地址信息.客户和地址是一对一的关系,但通过地址不能获得客户信息,客户和地址

f)一对一(One-to-One)=======>双向关联

以上配置的映射,只能通过实体Customer对象获得Address对象,是单向关联。若要使Address对象获得Customer对象,需要在Address中增加对Customer对象的引用

g)一对多(one-to-many)======>单项关联对于一对多的实体关系,表结构有两种设计策略,分别是外键关联和表关联

在JPA中,用@OneToMany来标识一对多的关系。实现一对多的单向关联,只需在代表一的实体(Author)中使用@OneToMany映射标注就可以了,代表多的实体不需要使用任何映射标注。

外键关联:两个表关系定义在其中的一个表中.

表关联:两个表的关系单独定义一个表中,通过一个中间表来关联.(表关联不可取) @OneToMany标记用于标注实体关系为一对多

h)一对多(one-to-many)======>双向关联

实体Company:公司。

实体Employee:雇员。

Company和Employee是一对多关系。那么在JPA中,如何表示一对多的双向关联呢?

JPA使用@OneToMany和@ManyToOne来标识一对多的双向关联。一端(Company)使用@OneToMany,多端(Employee)使用@ManyToOne。

在JPA规范中,一对多的双向关系由多端(Employee)来维护。就是说多端(Employee)为关系维护端,负责关系的增删改查。一端(Company)则为关系被维护端,不能维护关系。一端(Company)使用@OneToMany注释的mappedBy="company"属性表明Company是关系被维护端。

多端(Employee)使用@ManyToOne和@JoinColumn来注释属性company,@ManyToOne表明Employee是多端,@JoinColumn设置在employee表中的关联字段(外键)。

i)多对多(many-to-many)======>多对多关联

实体Player:玩家。

实体Game:游戏。

玩家和游戏是多对多的关系。一个玩家可以玩很多的游戏,一个游戏也可以被很多玩家玩。

JPA中使用@ManyToMany来注解多对多的关系,由一个关联表来维护。这个关联表的表名默认是:主表名+下划线+从表名。(主表是指关系维护端对应的表,从表指关系被维护端对应的表)。这个关联表只有两个外键字段,分别指向主表ID和从表ID。字段的名称默认为:主表名+下划线+主表中的主键列名,从表名+下划线+从表中的主键列名。

需要注意的:

1、多对多关系中一般不设置级联保存、级联删除、级联更新等操作。

2、可以随意指定一方为关系维护端,在这个例子中,我指定Player为关系维护端,所以生成的关联表名称为:player_game,关联表的字段为:player_id和game_id。

3、多对多关系的绑定由关系维护端来完成,即由Player.setGames(games)来绑定多对多的关系。关系被维护端不能绑定关系,即Game不能绑定关系。

4、多对多关系的解除由关系维护端来完成,即由Player.getGames().remove(game)来解除多对多的关系。关系被维护端不能解除关系,即Game不能解除关系。

5、如果Player和Game已经绑定了多对多的关系,那么不能直接删除Game,需要由Player解除关系后,才能删除Game。但是可以直接删除Player,因为Player是关系维护端,删除Player时,会先解除Player和Game的关系,再删除Player。

j)

9.

文档

JPA注解关联关系

JPA注解规范1.每一个持久化POJO类都是一个实体Bean,这可以通过在类的定义中是@Entity注解来进行声明:2.定义表(Table),@Table是类一级的注解,通过@Table注解可以为实体bean映射指定表(table),如果没有定义@Table,那么系统自动使用默认值.在@Table注解中,如果需要可以指定相应的值,结合使用@UniqueConstraint注解可以定义表的唯一约束3.基本属性映射实体bean中所有的非静态属性(static)和临时属性(Transient)属性都
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top