6.2.2 一对一@ OneToOne

本文介绍了一对一实体关联的@OneToOne标记及其属性,包括关联实体类型、级联样式、加载方式、可空性和双向关联等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@OneToOne标记用于标注实体关系为一对一。在实体CustomerEO与实体AddressEO的关系是一对一的关系。注释@OneToOne的定义的代码如下所示。

@Target({METHOD, FIELD}) @Retention(RUNTIME)

public @interface OneToOne {

Class targetEntity() default void.class;

CascadeType[] cascade() default {};

FetchType fetch() default EAGER;

boolean optional() default true;

String mappedBy() default "";

}

在使用此@OneToOne标记时,需要注意以下几个问题。

l         targetEntity属性表示默认关联的实体类型,默认为当前标注的实体类。例如使用默认设置与以下所示的设置的效果相同。一般情况使用默认设置就可以了。

@OneToOne(targetEntity=AddressEO.class)

public AddressEO getAddress() {

         return address;

}

l         cascade属性表示与此实体一对一关联的实体的联级样式类型。联级样式是当对实体进行操作时策略,这部分内容将在本章的6.6小节中详细讲述,这里就不多做介绍了。默认情况下,不关联任何操作。

l         fetch属性是该实体的加载方式,默认为及时加载EAGER,也可以使用惰性加载LAZY ,代码如下所示。

@OneToOne(fetch=FetchType.LAZY)

public AddressEO getAddress() {

                   return address;

}

l         optional属性表示关联的该实体是否能够存在null值。默认为true,表示可以存在null值。如果设置为false,则该实体不能为null,并且要同时配合使用@JoinColumn标记,将保存实体关系的字段设置为唯一的、不为null并且不能更新的,代码如下所示。

@OneToOne(optional=false)

@JoinColumn(name = "address_id",unique=true, nullable=false, updatable=false)

public AddressEO getAddress() {

         return address;

}

使用这样的映射后,一个CustomerEO实体必须对应一个AddressEO实体,也就是说表customer中,address_id字段必须有值,不能为空值。

l         mappedBy属性用于双向关联实体时,标注在不保存关系的实体中。它的用法将在本章6.2.4双向关联的小节中详细讲述。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值