1.解释:即主键唯一理所当然,当时表存在另外几个字段合起来唯一的条件,如学科表中年级和学科名必须合起来唯一
2.代码上基本上和一对一里面实例差不多,改的就是配置文件和测试代码,还有给实体bean增加了age字段
3.实体bean
package com.sinoi.domain;
public class Person {
private int id;
private String name;
private IdCard idCard;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IdCard getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
}
配置文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.sinoi.domain">
<class name="Person" table="hib_person">
<id name="id" column="PERSON_ID">
<generator class="native"/>
</id>
<property name="name" unique-key="unique_key_id"/>
<property name="age" unique-key="unique_key_id"/>
<one-to-one name="idCard"></one-to-one>
</class>
</hibernate-mapping>
4.测试代码
package unit.test;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.junit.Test;
import com.sinoi.domain.IdCard;
import com.sinoi.domain.Person;
import com.sinoi.util.HibernateUtil;
public class UnitTest {
@Test
public void save() {
Session session = HibernateUtil.getSession();
session.beginTransaction();
Person person1 = new Person();
person1.setName("beanGou1");
person1.setAge(12);
Person person2 = new Person();
person2.setName("beanGou2");
person2.setAge(12);
IdCard card = new IdCard();
card.setIdNum("abcde");
card.setPerson(person1);
session.persist(card);
session.persist(person1);
session.persist(person2);
session.getTransaction().commit();
}
//´Ó ´Ó¶ÔÏó²éѯ
@Test
public void load() {
Session session = HibernateUtil.getSession();
IdCard card = (IdCard) session.load(IdCard.class, 1);
Hibernate.initialize(card);
session.close();
System.out.println("card no " + card.getIdNum());
// System.out.println("person name " + card.getPerson().getName());
}
//´Ó ´Ó¶ÔÏó²éѯ
@Test
public void query1() {
Session session = HibernateUtil.getSession();
IdCard card = (IdCard) session.get(IdCard.class, 1);
System.out.println("card no " + card.getIdNum());
System.out.println("person name " + card.getPerson().getName());
}
//´Ó Ö÷¶ÔÏó²éѯ
@Test
public void query2() {
Session session = HibernateUtil.getSession();
Person person = (Person) session.get(Person.class, 1);
System.out.println("person name " + person.getName());
System.out.println("card no " + person.getIdCard().getIdNum());
}
}
即执行插入操作,就不能插入姓名和年龄都相同的对象