孙卫琴的《精通JPA与Hibernate》的读书笔记:用@OneToOne注解映射一对一关联
16lz
2021-05-05
在以下图中,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人进行了赞赏支持
更多相关文章
- 孙卫琴的《精通JPA与Hibernate》的读书笔记:用@ManyToMany注解映
- 小白前端入门笔记(10),怎么设置网站内部的超链接?
- Linux 运维需要掌握的 17 个实用技巧
- 把一个"结构体"当做属性后碰到的问题
- 实例演示,v-if,v-for,v-model,v-bind,v-on,计算属性和侦听器属性
- 使用 IntraWeb (20) - 基本控件之 TIWGrid
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(1): 查找
- CSS样式规则-CSS结构的特点