一、 数据库中两个表:
-- 删除表 DROP TABLE idcard ; DROP TABLE person ;
-- 创建表 CREATE TABLE person ( id VARCHAR(32) NOT NULL PRIMARY KEY , name VARCHAR(20) NOT NULL , age int ) ; CREATE TABLE idcard ( id VARCHAR(32) NOT NULL PRIMARY KEY , serial VARCHAR(18) NOT NULL , expiry int ) ; |
它们是一对一关系:
二、POJO类如下:
package com.wangbass.pojo;
public class Person { private String id; private String name; private Integer age; private IDCard idCard;
public IDCard getIdCard() { return idCard; } public void setIdCard(IDCard idCard) { this.idCard = idCard; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }
} |
package com.wangbass.pojo;
public class IDCard { private String id; private String serial; private Integer expiry; private Person person; public Integer getExpiry() { return expiry; } public void setExpiry(Integer expiry) { this.expiry = expiry; } public String getId() { return id; } public void setId(String id) { this.id = id; } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } public String getSerial() { return serial; } public void setSerial(String serial) { this.serial = serial; } } |
三、映射文件:
<?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"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.wangbass.pojo.Person" table="person"> <id name="id" type="java.lang.String"> <column name="id" length="32" /> <generator class="uuid.hex"></generator> </id> <property name="name" type="java.lang.String"> <column name="name" length="20" not-null="true" /> </property> <property name="age" type="java.lang.Integer"> <column name="age" /> </property> <one-to-one name="idCard" class="com.wangbass.pojo.IDCard" cascade="all"> </one-to-one> </class> </hibernate-mapping> |
其中的<one-to-one>中的cascade=”all”很关键。
<?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"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.wangbass.pojo.IDCard" table="idcard"> <id name="id" type="java.lang.String"> <column name="id" length="32" /> <generator class="foreign"> <param name="property">person</param> </generator> </id> <property name="serial" type="java.lang.String"> <column name="serial" length="18" not-null="true" /> </property> <property name="expiry" type="java.lang.Integer"> <column name="expiry" /> </property> <one-to-one name="person" class="com.wangbass.pojo.Person"></one-to-one> </class> </hibernate-mapping> |
其中<id name="id" type="java.lang.String">
<column name="id" length="32" />
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
指定与person的外键关联。
四、测试类如下:
package com.wangbass.pojo;
import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.cfg.Configuration;
public class HibernateDemo01Test { private Session session;
public HibernateDemo01Test() { this.session = new Configuration().configure().buildSessionFactory() .openSession(); }
public void insert(Person p) { this.session.save(p); this.session.beginTransaction().commit(); }
public void update(Person p) { this.session.update(p); this.session.beginTransaction().commit(); }
public Person queryById(String id) { Person p = null; String hql = "FROM Person p WHERE p.id=?"; Query q = this.session.createQuery(hql); q.setString(0, id); List l = q.list(); if (l.size() != 0) { p = (Person) l.get(0); }
return p;
}
public void delete(Person p) { this.session.delete(p); this.session.beginTransaction().commit(); }
public static void main(String[] args) {
HibernateDemo01Test hdt = new HibernateDemo01Test(); /* * Person p=new Person(); p.setAge(13); p.setName("王权2"); IDCard * idcard=new IDCard(); idcard.setSerial("2222222222"); * idcard.setExpiry(13); idcard.setPerson(p); p.setIdCard(idcard); * hdt.insert(p); */ Person p = hdt.queryById("2c9ab70a20cc9e4c0120cc9e4dd10001"); System.out.println("Person name:" + p.getName()); System.out.println("Person age:" + p.getAge()); /* * p.setAge(20); IDCard idcard=p.getIdCard(); System.out.println("IDCard * Expiry:"+idcard.getExpiry()); idcard.setExpiry(20); hdt.update(p); */ hdt.delete(p); // TODO Auto-generated method stub } } |
这样无论对Person对象进行什么操作,idcard对象就会自动跟着操作,实现目的。