一个Hibernate一对一主键双向关联实例

本文介绍了一对一关联关系在Hibernate框架中的实现方式,通过Person和Address两个实体类的示例,展示了如何使用主键双向关联进行数据库表之间的映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实体Person和Address为一对一关联关系,下面实例采用主键双向关联。

Person.java

package cn.qeli.ums.entity;

public class Person {
	private String pid;
	private String name;
	private String sex;
	private Address address;

	public Person() {
		super();
	}

	public Person(String name, String sex) {
		super();
		this.name = name;
		this.sex = sex;
	}
	getter和setter方法省略...
}

Person.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="cn.qeli.ums.entity.Person" table="persons">
		<id name="pid" column="pid" length="32" >
			<generator class="uuid.hex"></generator>			
		</id>
		<property name="name" length="20" />
		<property name="sex" length="4" />
		<one-to-one name="address" />
	</class>
</hibernate-mapping>

Address.java

package cn.qeli.ums.entity;

public class Address {
	private String aid;
	private String zhuzhi;
	private String postcode;
	private Person person;

	public Address() {
		super();
	}

	public Address(Person person, String zhuzhi, String postcode) {
		super();
		this.person = person;
		this.zhuzhi = zhuzhi;
		this.postcode = postcode;
	}
	getter和setter方法省略...
}

Address.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="cn.qeli.ums.entity.Address" table="addresses">
		<id name="aid" column="aid" length="32" >
			<generator class="foreign">
				<param name="property">person</param>
			</generator>			
		</id>
		<property name="zhuzhi" length="100" />
		<property name="postcode" length="6" />
		<one-to-one name="person" />
	</class>
</hibernate-mapping>

<id name="aid" column="aid" length="32" >中,name的那个aid匹配Address类的域aid。column为创建的addresses表的主键列。


测试代码:

package cn.qeli.ums.UTest;

import org.hibernate.Session;

import cn.qeli.ums.HibernateSessionFactory;
import cn.qeli.ums.entity.Address;
import cn.qeli.ums.entity.Person;

public class PersonTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PersonTest pt = new PersonTest();
		pt.addPerson();
		// pt.addAddress();
	}

	public void addAddress() {
		Session s = HibernateSessionFactory.getSession();
		s.beginTransaction();
		Person per = (Person) s.get("cn.qeli.ums.entity.Person",
				"402881e7395bc4ba01395bc4bcce0000");
		Address add = new Address(per, "金阳路86号", "420000");
		s.save(add);
		s.getTransaction().commit();
	}

	public void addPerson() {
		Session s = HibernateSessionFactory.getSession();
		s.beginTransaction();
		Person per = new Person("yj", "女");
		s.save(per);
		s.getTransaction().commit();
	}

}





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值