博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate_8_Person和IdCard实例_一对一关系:基于外键
阅读量:6986 次
发布时间:2019-06-27

本文共 5818 字,大约阅读时间需要 19 分钟。

1)建立Person类:

public class Person {	private Integer id;	private String name;	private IdCard IdCard;	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public Integer getId() {		return id;	}	public void setId(Integer id) {		this.id = id;	}	public IdCard getIdCard() {		return IdCard;	}	public void setIdCard(IdCard card) {		this.IdCard = card;	}	@Override	public String toString() {		return "Person [id=" + id + ",name=" + name + "]";	}}

2)建立IdCard类:

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;	}	@Override	public String toString() {		return "IdCard [id=" + id + ",number=" + number + "]";	}}

3)建立持久化类:

public class perAndIdDao {	/**	 * save方法	 */	@Test	public void testSave() {		Session session = SessionFactoryTools.getSession();		Transaction tx = null;		try {			tx = session.beginTransaction();			// ===============================================			// 新建两个Person对象			Person person1 = new Person();			person1.setName("张三");			Person person2 = new Person();			person2.setName("李四");			// 新建两个IdCard对象			IdCard idCard1 = new IdCard();			idCard1.setNumber("37292501");			IdCard idCard2 = new IdCard();			idCard2.setNumber("37292502");			// 加入关联对象			person1.setIdCard(idCard1);			person2.setIdCard(idCard2);			idCard1.setPerson(person1);			idCard2.setPerson(person2);			// 保存			session.save(person1);			session.save(person2);			session.save(idCard1);			session.save(idCard2);			// ===============================================			tx.commit();		} catch (RuntimeException e) {			if (tx != null) {				tx.rollback();			}			throw e;		} finally {			session.close();		}	}	/**	 * getById方法	 */	@Test	public void testGetById() {		Session session = SessionFactoryTools.getSession();		Transaction tx = null;		try {			tx = session.beginTransaction();			// ===============================================			// 获取person队象并打印改队象的信息和相关联的idCard信息			Person person = (Person) session.get(Person.class, 1);			System.out.println(person + ":");			System.out.println(person.getIdCard());			// 获取idCard对象并打印改队象的信息和相关联的person信息			IdCard idCard = (IdCard) session.get(IdCard.class, 2);			System.out.println(idCard + ":");			System.out.println(idCard.getPerson());			// ===============================================			tx.commit();		} catch (RuntimeException e) {			if (tx != null) {				tx.rollback();			}			throw e;		} finally {			session.close();		}	}	/**	 * 解除关联关系的方法	 */	@Test	public void testRemoveRelation() {		Session session = SessionFactoryTools.getSession();		Transaction tx = null;		try {			tx = session.beginTransaction();			// ===============================================			/**			 * 获取person对象并将其关联的IdCard设置为空 在多对一中,			 * 因为一方不具有外键管理权。所以解除外键关联是不能实现的			 * Person person = (Person) session.get(Person.class, 1);			 * person.setIdCard(null);			 */			/**			 * 获取idCard对象并将其相关联的person设置为空 在多对一中,			 * 因为多方具有外键的管理权限,所以该外键的解除是能够实现的			 */			IdCard idCard = (IdCard) session.get(IdCard.class, 1);			idCard.setPerson(null);			// ===============================================			tx.commit();		} catch (RuntimeException e) {			if (tx != null) {				tx.rollback();			}			throw e;		} finally {			session.close();		}	}	/**	 * 删除队象的方法	 */	@Test	public void testDelete() {		Session session = SessionFactoryTools.getSession();		Transaction tx = null;		try {			tx = session.beginTransaction();			// ===============================================			/**			 * 获取person对象并删除该对象			 * 在多对一中。因为一方不具有外键的管理权限。  	 			所以删除该对象是不可能实现的			 * Person person = (Person) session.get(Person.class, 1); 			 * session.delete(person);			 */						/**			 * 获取idCard对象并删除该对象			 * 在多对一中。因为多方具有外键爱你的管理权限,                         * 所以删除该对象是能够实现的			 */			IdCard idCard = (IdCard) session.get(IdCard.class, 1);			session.delete(idCard);			// ===============================================			tx.commit();		} catch (RuntimeException e) {			if (tx != null) {				tx.rollback();			}			throw e;		} finally {			session.close();		}	}}

4)Person.hbm.xml的配置:

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="map_3"> <!--类名:Person 类相应的表名:person 一对一相应类:IdCard 一对一相应的表:idCard 一对一所相应的外键的属性名:person --> <class name="Person" table="person"> <id name="id" type="int" column="id"> <generator class="native" /> </id> <property name="name" type="string" column="name" length="20" /> <one-to-one name="idCard" class="IdCard" property-ref="person"> </one-to-one> </class> </hibernate-mapping>

5)IdCard.hbm.xml的配置:

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="map_3"> <!--类名:IdCard 类相应的表名:idCard 多对一相应类的表名:person 多对一相应的类名:Person 多对一相应的列名:personId 设置为一对一关系:unique="true" --> <class name="IdCard" table="idCard"> <id name="id" type="int" column="id"> <generator class="native" /> </id> <property name="number" type="string" column="number" /> <many-to-one name="person" class="Person" column="personId" unique="true"> </many-to-one> </class> </hibernate-mapping>

6) 主文件的配置:

org.hibernate.dialect.MySQLDialect
jdbc:mysql:///hibernate0
com.mysql.jdbc.Driver
root
root
false
false
update

转载地址:http://jdqpl.baihongyu.com/

你可能感兴趣的文章
央视主持人张羽加盟今日头条母公司字节跳动 出任副总裁
查看>>
年终盘点篇:2018云中数据管理趋势预测
查看>>
内容电商崛起背后:这家企业瞄准短视频 靠天猫淘宝掘金
查看>>
李想创办的车和家发布智能电动车品牌“理想智造”
查看>>
智利海岸附近发生里氏5.6级地震 无人员伤亡消息
查看>>
手机上的中国“轻春运”
查看>>
中国税务机关确保减税降费政策落地生根
查看>>
中蒙二连边民互市贸易区出口额创新高
查看>>
BAT架构师总结之网站核心架构要素
查看>>
摩拜将更名为“美团单车” 网友:可送外卖吗?
查看>>
广东惠州公安一名副所长因公牺牲
查看>>
除了火药味,这里的演练还多了……
查看>>
继BERT之后,这个新模型再一次在11项NLP基准上打破纪录
查看>>
RTX 2080时代,如何打造属于自己的深度学习机器
查看>>
“破碎-重组-破碎” CSS3实现Lowpoly风格变形动画终极篇
查看>>
VKDevTool App黑盒调试工具
查看>>
那个你身边悄悄离职的人去哪儿了?IT人才流动大盘点
查看>>
精读《手写 SQL 编译器 - 智能提示》
查看>>
React.js 小书 Lesson4 - 前端组件化(三):抽象出公共组件类
查看>>
Java多线程干货系列—(四)volatile关键字| 掘金技术征文
查看>>