hibernate关联关系:一对一
模型:Person — IdCard
package Domain;
public class Person {
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;
}
private int id;
private String name;
private IdCard idCard;
}
package Domain;
import java.util.Date;
public class IdCard {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getUsefulLife() {
return usefulLife;
}
public void setUsefulLife(Date usefulLife) {
this.usefulLife = usefulLife;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
private int id;
private Date usefulLife;
private Person person;
}
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="Domain"> <class name="Person" table="person"> <id name="id"> <generator class="native" /> </id> <property name="name" /> <one-to-one name="idCard"/> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="Domain"> <class name="IdCard" table="id_card"> <id name="id"> <generator class="foreign"> <param name="property">person</param> </generator> </id> <property name="usefulLife" column="useful_Life"/> <one-to-one name="person" constrained="true"/> </class> </hibernate-mapping>
package Dao.Test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import Utils.hibernateUtil;
import Domain.Department;
import Domain.Employee;
public class One2ManyTest {
public static void main(String[] args) {
Department depart = add();
queryDepart(depart.getId());
}
static Department queryDepart(int departId) {
Session s = null;
try {
s = hibernateUtil.getSession();
Department depart = (Department) s.get(Department.class, departId);
System.out.println("emp size: " + depart.getEmps().size());
return depart;
} finally {
if (s != null)
s.close();
}
}
static Department add() {
Session s = null;
Transaction tx = null;
try {
Department depart = new Department();
depart.setName("+Manager+");
Employee emp1 = new Employee();
emp1.setDepart(depart);// 对象模型:建立两个对象的关联
emp1.setName("emp name1");
Employee emp2 = new Employee();
emp2.setDepart(depart);// 对象模型:建立两个对象的关联
emp2.setName("emp name2");
/*Set<Employee> emps = new HashSet<Employee>();
emps.add(emp1);
emps.add(emp2);
depart.setEmps(emps);*/
s = hibernateUtil.getSession();
tx = s.beginTransaction();
s.save(depart);
s.save(emp1);
s.save(emp2);
System.out.println("-----------------------------------------");
tx.commit();
return depart;
} finally {
if (s != null)
s.close();
}
}
}
package Dao.Test;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.Transaction;
import Utils.hibernateUtil;
import Domain.IdCard;
import Domain.Person;
public class One2OneQueryTest {
public static void main(String[] args) {
add();
query(1);
}
static Person query(int id){
Session s = null;
Transaction tx = null;
try{
s = hibernateUtil.getSession();
tx = s.beginTransaction();
// 一对一 查询主对象
// Person p = (Person)s.get(Person.class, id);
// System.out.println( "p.getIdCard().getUsefulLife():" + p.getIdCard().getUsefulLife());
// 一对一 查询从对象
IdCard idCard = (IdCard)s.get(IdCard.class, id);
System.out.println("idCard.getPerson().getName():" + idCard.getPerson().getName());
tx.commit();
//return p;
return null;
}finally{
if(s != null){
s.close();
}
}
}
static Person add(){
Session s = null;
Transaction tx = null;
try{
s = hibernateUtil.getSession();
IdCard idCard = new IdCard();
idCard.setUsefulLife(new Date());
Person p = new Person();
p.setName("Chen Huiyi");
p.setIdCard(idCard);
// 用Person对象来指定IdCard的id
idCard.setPerson(p);
tx = s.beginTransaction();
s.save(p);
s.save(idCard);
tx.commit();
return p;
}finally{
if(s != null){
s.close();
}
}
}
}