Hibernate_8_Person和IdCard实例_一对一关系:基于外键
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) 主文件的配置:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory name="foo"> <!-- 配置数据库信息 -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql:///hibernate0
</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.username">root</property>
<property name="hibernate.connection.password">root</property> <!-- 其它配置 -->
<property name="hibernate.show_sql">false</property>
<property name="hibernate.format_sql">false</property>
<property name="hbm2ddl.auto">update</property> <!-- 映射文件配置 -->
<mapping resource="map_3/Person.hbm.xml" />
<mapping resource="map_3/IdCard.hbm.xml" /> </session-factory>
</hibernate-configuration>
Hibernate_8_Person和IdCard实例_一对一关系:基于外键的更多相关文章
- Hibernate_9_Person和IdCard实例_一对一关系:基于主键
1)建立Person类:(与8同样) 2)建立IdCard类:(与8同样) 3)建立持久化类: 1>保存方法(与8同样) 2>获取方法(与8同样) 3>删除方法(与8同样) ...
- Entity Framework - 理清关系 - 基于外键关联的单向一对一关系
注:本文针对的是 Entity Framework Code First 场景. 之前写过三篇文章试图理清Entity Framework中的一对一关系(单相思(单向一对一), 两情相悦(双向一对 ...
- hibernate笔记--基于外键的单(双)向的一对一映射关系
假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射 ...
- Entity Framework - 基于外键关联的单向一对一关系
代码的世界,原以为世界关系很简单,确道是关系无处不在.NET世界里ORM框架中EntityFramework作为其中翘楚,大大解放了搬砖工作的重复工作,着实提高了不少生产力,而也碰到过不少问题!比如关 ...
- Hibernate学习(二)关系映射----基于外键的单向一对一
事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...
- Hibernate学习(二补充)关系映射----基于外键的双向一对一
刚刚写的是基于外键的单向一对一. 那么双向一对一就是在单向一对一的基础上稍微改动就可以了. account.java和account.hbm.xml都不用变动 只要我们小小的变动address.j ...
- Hibernate关系映射(二) 基于外键的双向一对一
基于外键的双向一对一关联映射 需要在一端添加<one-to-one>标签,用property-ref来指定反向属性引用. 还是通过刚才用户和地址来演示双向一对一关联. 代码演示 一.实体类 ...
- Hibernate 基于外键的双向一对一关联映射
之前简单介绍了基于外键的单项一对一的关联映射关系,本文简单介绍基于外键的双向一对一的关联映射. 1.设计表结构 表结构对于双向一对一来说没有多少改变,只是双向都可以获取到对方. 2.创建Person对 ...
- java之hibernate之基于外键的双向一对一关联映射
这篇讲解 基于外键的双向一对一关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系.表的设计 2.类结构 Person.java public class Person implements ...
随机推荐
- Web应用类型扫描识别工具WhatWeb
Web应用类型扫描识别工具WhatWeb WhatWeb是一款Kali Linux预安装的Web扫描工具.它使用Ruby语言编写.该工具可以扫描网站,获取该网站的各类信息,如所使用的CMS.博客平 ...
- SRPG Studio 教程(一) 创建游戏及引用素材
儿时玩红白机的时候,火纹和机器人大战这类战棋类的游戏就是博主的最爱,恰逢最近steam上上架了一款SRPG Studio用于制作火纹,趁这个机会学习一下,顺便记录下来. 秉承着一个程序猿的自我修养,以 ...
- FastReport.Net使用:[4]分组
1.绘制报表标题和栏首. 2.设置报表栏,为数据区添加一个分组 3.右键分组页眉,在其右键菜单中选择“编辑”,显示分组编辑对话框. 设置分组条件,可直接通过下拉菜单选择Table表中的[学号]列:也能 ...
- Eigen学习笔记1:在VS2015下Eigen(矩阵变换)的配置
一.Eigen简介 Eigen是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法. Eigen适用范围广,支持包括固定大小.任意大小的所有矩阵操作,甚至是稀疏矩阵:支持 ...
- bzoj 1776
收获: 树上直径一定包含深度最深的点. 然后O(nlogn) 暴力. /************************************************************** P ...
- hdu 1569 最小割
和HDU 1565是一道题,只是数据加强了,貌似轮廓线DP来不了了. #include <cstdio> #include <cstring> #include <que ...
- 区间DP--凸多边形三角剖分
给定一个具有N(N<50)个顶点(从1到N编号)的凸多边形,每个顶点的权均已知.问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小? 输入文件:第一行 顶点 ...
- noip200204过河卒
如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例如上图 C ...
- [转]android中OnTouch和OnClick、 imagebutton的src和background有什么区别
1.OnTouch和OnClick有何区别? 专业回答 1.onClick就传入一个View对象,而 onTouch要传入一个View 对象和 MotionEvent的对象2.onTouch对控件 ...
- zoj 1610 Count the Colors 线段树区间更新/暴力
Count the Colors Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/show ...