对JPA的理解与回顾总结(二)

接上文:

一对一关系的映射:思路
一对一关系的映射有两种解决方案,一种是唯一外键方式和共享主键方式;
这里我们先介绍唯一外键方式:
1 首先确定好关系的维护端,通过JoinColumn注解进行指定;而关系的被维护端用
mappedBy属性来指定,当然首先就应该用OneToOne注解标识一对一关联的字段;
2 还是明确那一点,外键的更新操作是由关系维护端了完成的。
其他的都是一样的;
举个例子吧:人和身份证,一个人只能有一个身份证,一个身份证只能属于一个人。


 

package cn.itcast.domain;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

@Entity
public class Person {
 private Integer id;
 private String name;
 private IdCard idcard;
 @Id
 @GeneratedValue
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 @OneToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST,
   CascadeType.REFRESH, CascadeType.MERGE, CascadeType.REMOVE }, optional = false)
 @JoinColumn(name = "idcard_id")
 //joincolumn表示该字段为外键,从而表示这个类所对应的表示关系的主控方;或者说维护端;
 //fetch = FetchType.EAGER表示是立即 载;
 public IdCard getIdcard() {
  return idcard;
 }
 public void setIdcard(IdCard idcard) {
  this.idcard = idcard;
 }
}

 



package cn.itcast.domain;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class IdCard {
 private Integer id;
 private String idcardno;
 private Person person;
 @Id
 @GeneratedValue
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getIdcardno() {
  return idcardno;
 }
 public void setIdcardno(String idcardno) {
  this.idcardno = idcardno;
 }
 @OneToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE,
   CascadeType.REFRESH }, mappedBy = "idcard")
 public Person getPerson() {
  return person;
 }
 public void setPerson(Person person) {
  this.person = person;
 }
}
 

package cn.itcast.domain;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class TestOneToOne {
 
 public static void main(String[] args) {
  save();
 }
 private static void save() {
  EntityManagerFactory factory = Persistence
    .createEntityManagerFactory("itcast");
  EntityManager entityManager = factory.createEntityManager();
  EntityTransaction transaction = entityManager.getTransaction();
  transaction.begin();
  Person person = new Person();
  IdCard idcard = new IdCard();
  person.setName("荣强");
  idcard.setIdcardno("1011306");
  idcard.setPerson(person);
  person.setIdcard(idcard);
  entityManager.persist(person);
  transaction.commit();
  entityManager.close();
  factory.close();
 }

}

 
对于持久化api,想必大家都比较熟悉,只要对持久化框架有过了解的基本上一看就懂。
接下文
对JPA的理解与回顾总结(二) 转发至微博
 
对JPA的理解与回顾总结(二) 转发至微博
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值