6.2.4 双向关联(Bidirectional)

本文介绍了一对一双向关联映射的实现方式,通过在两个实体类之间相互引用,实现了从CustomerEO到AddressEO及反向的导航。文章详细展示了如何在Java实体类中配置这种关联关系。

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

以上配置的映射,只能通过实体CustomerEO对象获得AddressEO对象,是单向关联。若要使AddressEO对象获得CustomerEO对象,需要在AddressEO中增加对CustomerEO对象的引用。修改后的AddressEO类图如图所示。

双向关联后AddressEO 实体的代码如下所示。

@Entity

@Table(name = "address")

public class AddressEO implements java.io.Serializable {

         ……

         private CustomerEO customer;

 

         @OneToOne(mappedBy = "address")

         public CustomerEO getCustomer() {

                   return customer;

         }

 

         public void setCustomer(CustomerEO customer) {

                   this.customer = customer;

         }

 

}

其中,CustomerEO属性也要使用@OneToOne标记,并且使用mappedBy属性来指明所映射的实体关系,它的值为所关联实体中该属性的名称。

例如本例中mappedBy = "address"address作为CustomerEO实体中的属性存在,如下代码中加粗的所示。

@Entity

@Table(name = "customer")

public class CustomerEO implements java.io.Serializable {

private AddressEO address;

 

         @OneToOne(cascade = { CascadeType.ALL })

         @JoinColumn(name="address_id")

         public AddressEO getAddress() {

                   return address;

         }

}

这样配置后,不仅通过CustomerEO实体能够获得AddressEO实体,也能够通过AddressEO获得CustomerEO实体。如下代码所示。

//通过CustomerEO获得AddressEO

Integer custId = new Integer(1);

CustomerEO customer = entityManager.find( CustomerEO.class, custId);

AddressEO address = customer.getAddress();

//通过AddressEO获得对应CustomerEO

Integer addrId = new Integer(1);

AddressEO address = entityManager.find( AddressEO.class, addrId);

CustomerEO customer = address.getCustomer();

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值