这次,继续上一次的实例。 记录1对1 主键双向关联.
还是Person和 Address为例.
请直接看代码:
Person_SX_PK_One_to_One:
public class Person_SX_PK_One_to_One {
private Integer id;
private String name;
private Integer age;
private Address_SX_PK_One_To_One addressSXPKOneToOne;
//getter和setter方法省略
}
Address_SX_PK_One_To_One:
public class Address_SX_PK_One_To_One {
private Integer id;
private String addressDetail;
private Person_SX_PK_One_to_One personSXPKOneToOne;
//getter和setter方式省略
}
Hibernate配置文件:
Person_SX_PK_One_to_One.hbm.xml
<?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> <class name="pack.java.model.Person_SX_PK_One_to_One" table="ZHT_PERSON_SX_PK_ONE_TO_ONE"> <id name="id" column="ID"> <generator class="identity"></generator> </id> <property name="name" column="NAME"></property> <property name="age" column="AGE"></property> <!-- 1对1,引用address对象, --> <one-to-one name="addressSXPKOneToOne" class="pack.java.model.Address_SX_PK_One_To_One" fetch="select" lazy="false" cascade="all"> </one-to-one> </class> </hibernate-mapping>
Address_SX_PK_One_To_One.hbm.xml
<?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>
<class name="pack.java.model.Address_SX_PK_One_To_One" table="ZHT_ADDRESS_SX_PK_ONE_TO_ONE">
<id column="ID" name="id">
<!-- generator 主键生成策略,配制成foreign,外键,是引用主表person的对象。 -->
<generator class="foreign">
<param name="property">personSXPKOneToOne</param>
</generator>
</id>
<property name="addressDetail" column="ADDRESSDETAIL"></property>
<!-- 表示在address表中,存在外键约束,外键参考相关表person对象。 -->
<one-to-one name="personSXPKOneToOne" constrained="true"></one-to-one>
</class>
</hibernate-mapping>
在Hibernate.cfg.xml配置刚刚添加的两个映射hibernate.hbm.xml文件。
配置好之后,就进行测试.
写一个Test类,
package pack.java.test;
import org.hibernate.Session;
import pack.java.hibernate.HibernateSessionFactory;
import pack.java.model.Address_SX_PK_One_To_One;
import pack.java.model.Person_SX_PK_One_to_One;
/**
* 1对1,主键双向关联。
* @author Administrator
*
*/
public class HibernateDemoXS_PK_OneToOne {
public static void main(String[] args) {
HibernateDemoXS_PK_OneToOne demoXSPKOneToOne = new HibernateDemoXS_PK_OneToOne();
Session session = demoXSPKOneToOne.getSession();
//保存操作;
demoXSPKOneToOne.savePerson(session);
//查询;
Person_SX_PK_One_to_One personSXPKOneToOne = demoXSPKOneToOne.queryPersonBy(1);
System.out.println("\n结果查询如下:");
System.out.println(personSXPKOneToOne.getId()+","+personSXPKOneToOne.getName()+","+personSXPKOneToOne.getAge()+","+personSXPKOneToOne.getAddressSXPKOneToOne().getAddressDetail());
//更新;
demoXSPKOneToOne.updatePersonByPersonID(1);
//再次查询;
personSXPKOneToOne = demoXSPKOneToOne.queryPersonBy(1);
System.out.println("\n结果查询如下:");
System.out.println(personSXPKOneToOne.getId()+","+personSXPKOneToOne.getName()+","+personSXPKOneToOne.getAge()+","+personSXPKOneToOne.getAddressSXPKOneToOne().getAddressDetail());
}
/**
* 根据Person编号,查询Person对象;
* @param personID
*/
private Person_SX_PK_One_to_One queryPersonBy(Integer personID){
//获取session;
Session session = getSession();
Person_SX_PK_One_to_One personSXPKOneToOne = (Person_SX_PK_One_to_One) session.load(Person_SX_PK_One_to_One.class, personID);
return personSXPKOneToOne;
}
/**
* 更新操作;
* @param personID
*/
private void updatePersonByPersonID(Integer personID){
//先查询出person,然后,在更新;
Person_SX_PK_One_to_One personSXPKOneToOne = queryPersonBy(personID);
personSXPKOneToOne.setName("张无忌");
personSXPKOneToOne.setAge(23);
//获取session;
Session session = getSession();
//开始事务,更新操作, 提交事务。
session.beginTransaction().begin();
session.update(personSXPKOneToOne);
session.beginTransaction().commit();
session.close();
}
/**
* 保存
* @param session
*/
private void savePerson(Session session){
Person_SX_PK_One_to_One person = new Person_SX_PK_One_to_One();
person.setAge(63);
person.setName("张三丰");
Address_SX_PK_One_To_One address = new Address_SX_PK_One_To_One();
address.setAddressDetail("北京市朝阳区东三环北路");
//给person设置address;
person.setAddressSXPKOneToOne(address);
//给address设置person;
address.setPersonSXPKOneToOne(person);
//保存操作;
session.beginTransaction().begin();
session.save(person);
session.beginTransaction().commit();
session.close();
System.out.println("保存成功!");
}
/**
* 获取session;
* @return
*/
private Session getSession(){
return HibernateSessionFactory.getSession();
}
}
控制台输出如下:
保存成功!
结果查询如下:
1,张三丰,63,北京市朝阳区东三环北路
结果查询如下:
1,张无忌,23,北京市朝阳区东三环北路