hibernate基于外键的双向一对一
配置hibernate环境、
实体类
public class People {
private Integer id;
private String name;
private IdCard idCard;
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;
}
public IdCard getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
public People(String name) {
super();
this.name = name;
}
public People(String name, IdCard idCard) {
super();
this.name = name;
this.idCard = idCard;
}
public People() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "People [id=" + id + ", name=" + name + "]";
}
}
public class IdCard {
private Integer id;
private String address;
private People people;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public People getPeople() {
return people;
}
public IdCard(String address) {
super();
this.address = address;
}
public void setPeople(People people) {
this.people = people;
}
public IdCard(String address, People people) {
super();
this.address = address;
this.people = people;
}
public IdCard() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "IdCard [id=" + id + ", address=" + address + "]";
}
}
映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.wd.pojo.People" table="t_people">
<id name="id" column="id">
<generator class="identity"></generator>
</id>
<property name="name" column="name" length="50"></property>
<!-- 通过控制多的一方唯一,实现一对一 -->
<many-to-one name="idCard" column="cardId"></many-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.wd.pojo.IdCard" table="t_idcard">
<id name="id" column="id">
<generator class="identity"></generator>
</id>
<property name="address" column="address" length="50" ></property>
<one-to-one name="people" property-ref="idCard"></one-to-one>
</class>
</hibernate-mapping>
测试代码
public class HibernateTest {
@Test
public void testCreateDB(){
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
//第一个参数 是否打印脚本,第二个参数是否导入数据库
se.create(true, true);
}
@Test
public void testInit() {
Session session = null;
try {
//准备数据
IdCard idCard1 = new IdCard("重庆");
IdCard idCard2 = new IdCard("北京");
IdCard idCard3 = new IdCard("上海");
People people1 = new People("Steven");
People people2 = new People("Russell");
People people3 = new People("qwer");
idCard1.setPeople(people1);
idCard2.setPeople(people2);
idCard3.setPeople(people3);
people1.setIdCard(idCard1);
people2.setIdCard(idCard2);
people3.setIdCard(idCard3);
//开启session
session = HibernateUtil.getSession();
session.beginTransaction();
session.save(idCard1);
session.save(idCard2);
session.save(idCard3);
session.save(people1);
session.save(people2);
session.save(people3);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}
@Test
public void testGet() {
Session session = null;
try {
session = HibernateUtil.getSession();
session.beginTransaction();
People people = (People) session.get(People.class, 1);
System.out.println(people.getIdCard());
System.out.println("-----------------------");
IdCard idCard = (IdCard) session.get(IdCard.class, 2);
System.out.println(idCard.getPeople());
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}
}