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

3)建立持久化类:

public class perAndIdDao {/*** save方法*/@Testpublic 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方法*/@Testpublic 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();}}/*** 解除关联关系的方法*/@Testpublic 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();}}/*** 删除队象的方法*/@Testpublic 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实例_一对一关系:基于外键相关推荐

  1. Hibernate_9_Person和IdCard实例_一对一关系:基于主键

    1)建立Person类:(与8同样) 2)建立IdCard类:(与8同样) 3)建立持久化类:  1>保存方法(与8同样)  2>获取方法(与8同样)  3>删除方法(与8同样)   ...

  2. java之hibernate之基于外键的一对一单向关联映射

    这篇讲解基于外键的一对一单向关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系.表的设计 注意:基于外键的一对一关联的表结构和多对一的表结构是一致的,但是,外键是唯一的. 2.类的结构 Pe ...

  3. 基于外键关联的一对多单向关联

    基于外键关联的单向一对多关联是一种很少见的情况,并不推荐使用. <class name="Person"><id name="id" colu ...

  4. hibernate的一对一主键双向映射关系和外键双向映射关系(一)

    主键关联的重点是关联的两个表共享一个主键值.本例中采用,一个单位在网上的一个系统中注册会员. 1,会员数据保存在会员表company中,每个会员的登录账号保存在表login中: 2,一个会员只有一个登 ...

  5. mysql建立表间键关系,MySQL外键(表与表之间的关系)

    外键:用来建立两张表之间的关系 键语法:foreign key(当前表中建立观念西的外键字段)references 被关联表名(id)三种表与表之间的关系一对多 多对多 一对一 研究表与表之间的关系如 ...

  6. jpa 每次启动都要创建外键索引_什么情况下外键建立索引?是必须的吗

    朋友问了一个问题: 首先,外键什么情况下采用呢? 外键是否采用看业务应用场景,以及开发成本的 1. 互联网行业应用不推荐使用外键: 用户量大,并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能 ...

  7. mysql 外键引擎_对于mysql的外键和mysql的存储引擎

    存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型). ...

  8. sqlserver有外键无法创建触发器_数据库不使用外键的 9 个理由

    点击上方蓝色字体,选择"置顶公众号" 优质文章,第一时间送达 作者 | bang,Piotr Kononow 链接 | www.jdon.com/49188 Piotr Konon ...

  9. sql组合键设置外键_学习SQL:外键

    sql组合键设置外键 In the previous article, we talked about the primary key (PK). In this one, we'll check w ...

最新文章

  1. C C++的编译过程详解
  2. Singleton 单例模板
  3. 100个必会的python脚本-100行Python代码实现自动抢火车票(附源码)
  4. linux怎么命令设置网络连接,Linux网络操作命令
  5. ES6学习笔记(六)数组的扩展
  6. 电脑出货量_Q3季度全球笔记本电脑出货量增长34%,惠普出货量首次超过联想
  7. 浅入浅出理解傅里叶变换
  8. Spring Boot + SpringSecurity + JWT 实现简单的 restful Api 权限控制
  9. Java语法基础----课后实践作业
  10. Docker安装ElasticSearch 版本7.6.2
  11. 安装软件出现提示:无法将数值写入键
  12. PC端,微信扫码实现拨打电话的功能
  13. mac获取ios应用包名
  14. C/C++一些常见的错误
  15. RSA生成密钥对的过程
  16. Android音视频开发入门(5)使用LAME编码一个PCM文件,为了跳槽强刷1000道Android真题
  17. 怎么绘制旋转Chem3D模型
  18. 计算机网络题库类型 (建议收藏)
  19. 邮件客户端 web linux,Linux下五个流行的Webmail
  20. 新浪微博粉丝通推广效果分析

热门文章

  1. 【LeetCode】解题309:Best Time to Buy and Sell Stock with Cooldown(动态规划)
  2. linux 画面好 游戏,2017年13款画面最优秀的游戏!极致画面美到惊叹
  3. 使用C语言的七个步骤
  4. 论文笔记:AAAI 2021 Beyond Low-frequency Information in Graph Convolutional Networks
  5. react中input输入框显示字数
  6. 20201024腾格尔沙漠徒步
  7. B2B平台显现5大价值特征和6种商业创新模式
  8. C++经典算法题-洗扑克牌(乱数排列)
  9. (附源码)计算机毕业设计SSM疫情下小区网格化管理系统
  10. cobaltstrike域前置