视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Hibernate关联关系映射之一对一关联关系
2020-11-09 14:44:33 责编:小采
文档


人和身份证之间就是一个典型的一对一关联关系。实现一对一关联关系映射的方式有两种一种是基于外键,一种是基于主键,下面我们先看基于外键的关联方式 首先看他们的实体类 Person类 package entity;public class Person {private Integer id;private String

人和身份证之间就是一个典型的一对一关联关系。实现一对一关联关系映射的方式有两种一种是基于外键,一种是基于主键,下面我们先看基于外键的关联方式

首先看他们的实体类

Person类

package entity;

public class Person {
	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;
	}
}

然后看IdCard类

package entity;

public class IdCard {
	private Integer id;
	private String number;
	private Person person;
	
	public Integer getId() {
	return id;
	}
	public void setId(Integer id) {
	this.id = id;
	}
	public String getNumber() {
	return number;
	}
	public void setNumber(String number) {
	this.number = number;
	}
	public Person getPerson() {
	return person;
	}
	public void setPerson(Person person) {
	this.person = person;
	}
	
	
}

这里在Person类和IdCard类中分别有一个对方类型的属性。

然后看他们之间的关联关系映射,首先看Person.hbm.xml





 
 
 
 
 
 
 
 
 
 
 
  
 
 

然后看一下IdCard.hbm.xml文档




 
 
 
 
 
 
 
 
 
 
 
 

这样Person和IdCard之间的一对一关联关系就搭建好了,然后看一下测试类

package test;

import static org.junit.Assert.*;

import org.hibernate.Session;
import org.hibernate.Transaction;

import entity.IdCard;
import entity.Person;
import factory.HibernateSessionFactory;

public class Test {

	private Session session = null;
	private Transaction tran = null;
	@org.junit.Test
	public void save() {
	session = HibernateSessionFactory.getSession();
	tran = session.beginTransaction();
	try{
	//新建对象
	Person p = new Person();
	p.setId(1);
	p.setName("张三");
	
	IdCard idCard = new IdCard();
	idCard.setId(1);
	idCard.setNumber("10001");
	
	p.setIdCard(idCard);
	idCard.setPerson(p);
	
	session.save(p);
	session.save(idCard);
	
	tran.commit();
	}catch(Exception e){
	tran.rollback();
	}
	}

	@org.junit.Test
	public void Get() {
	session = HibernateSessionFactory.getSession();
	tran = session.beginTransaction();
	try{
	Person person = (Person) session.get(Person.class, 1);
	IdCard idCard = person.getIdCard();
	System.out.println(person.getName()+"身份证号:"+idCard.getNumber());
	tran.commit();
	}catch(Exception e){
	tran.rollback();
	}
	}
	//解除关系
	@org.junit.Test
	public void RemoveRelation() {
	session = HibernateSessionFactory.getSession();
	tran = session.beginTransaction();
	try{
	//从有外键方接触关联关系可以,不可以从无外键方解除
	IdCard idCard = (IdCard)session.get(IdCard.class, 1);
	idCard.setPerson(null);
	tran.commit();
	}catch(Exception e){
	tran.rollback();
	}
	}
	//删除
	@org.junit.Test
	public void DeleteRelation() {
	session = HibernateSessionFactory.getSession();
	tran = session.beginTransaction();
	try{
	//如果没有关联对方,可以直接删除。 
	//如果有关联对方,且可以维护关联关系,他就会先删除关联关系,在删除自己。
	//如果有关联关系,且不能维护关联关系,所以会执行删除自己,并且抛出异常。
	IdCard idCard = (IdCard)session.get(IdCard.class, 1);
	session.delete(idCard);
	tran.commit();
	}catch(Exception e){
	tran.rollback();
	}
	}
}

这就是基于外键方式,基于主键的方式只需要在以上基础修改一下映射文件即可,下面分别看一下修改后的映射文件

首先看Person.hbm.xml





 
 
 
 
 
 
 
 
 
 
 
 
 

然后看IdCard.hbm.xml




	
	
	
	
	
	
	 person
	
	
	
	
	
	
	
	
	

下载本文
显示全文
专题