JPAのOneToOne関係処理
関係データベースを早く勉強したとき、一対多、多対一、一対一、多対多の関係を学んだことがあります.前に1対多と多対一の関係を紹介しました.1対1を見てみましょう.
[color=red]ビジネス要件:一般的には、1人につき1つの身分証明書番号しかありません(特殊な場合を除きます).[/color]
次に、人と身分証明書エンティティクラスを示します.
テストクラス
[b]まとめ:1対1は[url=http://jiangduxi.iteye.com/blog/646693[1]多[/url]を考慮し,その関係維持端は作成者自身が定義する.
[/b]
[color=red]ビジネス要件:一般的には、1人につき1つの身分証明書番号しかありません(特殊な場合を除きます).[/color]
次に、人と身分証明書エンティティクラスを示します.
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 Integer id;
private String name;
private IDCard idcard;
public Person(){}
public Person(String name){
this.name = name;
}
@Id @GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=10,nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToOne(optional=false,cascade={CascadeType.ALL})
@JoinColumn(name="idcard_id")
public IDCard getIdcard() {
return idcard;
}
public void setIdcard(IDCard idcard) {
this.idcard = idcard;
}
}
import javax.persistence.CascadeType;
import javax.persistence.Column;
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 cardno;
private Person person;
public IDCard(){}
public IDCard(String cardno) {
this.cardno = cardno;
}
this.person = person;
}
@Id @GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=18,nullable=false)
public String getCardno() {
return cardno;
}
public void setCardno(String cardno) {
this.cardno = cardno;
}
@OneToOne(mappedBy="idcard",cascade={CascadeType.REFRESH,CascadeType.MERGE,CascadeType.REFRESH})
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
}
テストクラス
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.junit.BeforeClass;
import org.junit.Test;
import cn.itcast.bean.IDCard;
import cn.itcast.bean.Person;
public class OneToOneTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Test public void add(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin(); // start transaction
Person person = new Person(" ");
person.setIdcard(new IDCard("88888888888"));
em.persist(person);
em.getTransaction().commit(); //commit transaction
em.close();
factory.close();
}
}
[b]まとめ:1対1は[url=http://jiangduxi.iteye.com/blog/646693[1]多[/url]を考慮し,その関係維持端は作成者自身が定義する.
[/b]