在以下图中,ADDRESSES表的ID字段既是主键,同时作为外键参照CUSTOMERS表的主键,也就是说,ADDRESSES表与CUSTOMERS表共享主键。

在Customer类中,也是用@OneToOne注解来映射homeAddress属性:

  @OneToOne(    cascade=CascadeType.ALL,    mappedBy="customer"  )  private Address homeAddress;

在Customer类与Address类的双向一对一关联关系中,由Address类作为主动方,来维护关联关系,它所对应的ADDRESSES表的ID键会参照CUSTOMERS表。Customer类是被动方,因此以上@OneToOne注解设置了mappedBy属性。

在Address类中,用@OneToOne注解来映射customer属性,并且在映射id属性时没有指定对象标识符生成策略:

@Id@Column(name="ID")private Long id;  @OneToOne(optional=false)@JoinColumn(name=" ID")  @MapsIdprivate Customer customer;

以上@MapsId注解表明ADDRESSES表的ID主键是由CUSTOMERS表的主键决定的,所以ADDRESSES表不需要单独生成主键。

对于以下代码:

tx = entityManager.getTransaction();tx.begin();entityManager.persist(customer);tx.commit();

当EntityManager的persist()方法向CUSTOMERS表插入一条记录,同时还会向ADDRESSES表插入一条记录,执行如下insert语句:

insert into CUSTOMERS (ID,NAME)values (1, 'Tom');insert into ADDRESSES(ID,CITY,STREET,PROVINCE,ZIPCODE) values (1, 'city1', 'street1', 'province1', '100001 ');

©著作权归作者所有:来自51CTO博客作者孙卫琴的原创作品,如需转载,请注明出处,否则将追究法律责任

你的鼓励让我更有动力

赞赏

0人进行了赞赏支持

更多相关文章

  1. 孙卫琴的《精通JPA与Hibernate》的读书笔记:用@ManyToMany注解映
  2. 小白前端入门笔记(10),怎么设置网站内部的超链接?
  3. Linux 运维需要掌握的 17 个实用技巧
  4. 把一个"结构体"当做属性后碰到的问题
  5. 实例演示,v-if,v-for,v-model,v-bind,v-on,计算属性和侦听器属性
  6. 使用 IntraWeb (20) - 基本控件之 TIWGrid
  7. Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数
  8. Delphi 正则表达式之TPerlRegEx 类的属性与方法(1): 查找
  9. CSS样式规则-CSS结构的特点

随机推荐

  1. 【Android(安卓)开发教程】ListFragment
  2. Android调用WIFI设置
  3. Android中通过经纬度来过去到城市名称
  4. 编写android jni代码时遇到的问题
  5. Android关于 https SSL handshake aborte
  6. Android 中Handler
  7. android textview属性
  8. Android当中layer-list使用
  9. [Android] 布局基础知识点
  10. Android开发者指南(8) —— What is Andr