现在的位置: 首页 > 综合 > 正文

6.2.4 双向关联(Bidirectional)

2013年02月14日 ⁄ 综合 ⁄ 共 1286字 ⁄ 字号 评论关闭

以上配置的映射,只能通过实体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();

 

抱歉!评论已关闭.