接上文:
一对一关系的映射:思路
一对一关系的映射有两种解决方案,一种是唯一外键方式和共享主键方式;
这里我们先介绍唯一外键方式:
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
.createEntityManagerFacto ry("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,想必大家都比较熟悉,只要对持久化框架有过了解的基本上一看就懂。
接下文
转发至微博
转发至微博