双向一对一没有固定的维护端和被维护端,看实际情况而定
在这例子中
Person 与 IDCard一一对应 ,在这里我把Person设定为维护端
Person.java
package com.olay.entity;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
@Entity
public class Person {
private int id;
private String name;
private IDCard idcard;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(length=10,nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToOne(cascade=CascadeType.ALL,optional=false)
@JoinColumn (name="idcard_id") //定义外键 外键在关系维护端定义
public IDCard getIdcard() {
return idcard;
}
public void setIdcard(IDCard idcard) {
this.idcard = idcard;
}
}
IDCard.java
package com.olay.entity;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class IDCard {
private int id;
private String cardno;
private Person person;
@Id @GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(length=18,nullable=false)
public String getCardno() {
return cardno;
}
public void setCardno(String cardno) {
this.cardno = cardno;
}
@OneToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH},fetch=FetchType.LAZY,mappedBy="idcard")
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
测试类
package com.olay.entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import junit.framework.TestCase;
public class OneToOne extends TestCase {
public void test(){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("olayjpa");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
IDCard idcard = new IDCard();
idcard.setCardno("111233444444444432");
Person person = new Person();
person.setName("olay");
person.setIdcard(idcard);
em.persist(person);
em.getTransaction().commit();
em.close();
emf.close();
}
}
结果: