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实例_一对一关系:基于外键的更多相关文章

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

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

  2. Entity Framework - 理清关系 - 基于外键关联的单向一对一关系

      注:本文针对的是 Entity Framework Code First 场景. 之前写过三篇文章试图理清Entity Framework中的一对一关系(单相思(单向一对一), 两情相悦(双向一对 ...

  3. hibernate笔记--基于外键的单(双)向的一对一映射关系

    假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射 ...

  4. Entity Framework - 基于外键关联的单向一对一关系

    代码的世界,原以为世界关系很简单,确道是关系无处不在.NET世界里ORM框架中EntityFramework作为其中翘楚,大大解放了搬砖工作的重复工作,着实提高了不少生产力,而也碰到过不少问题!比如关 ...

  5. Hibernate学习(二)关系映射----基于外键的单向一对一

    事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...

  6. Hibernate学习(二补充)关系映射----基于外键的双向一对一

    刚刚写的是基于外键的单向一对一.  那么双向一对一就是在单向一对一的基础上稍微改动就可以了. account.java和account.hbm.xml都不用变动  只要我们小小的变动address.j ...

  7. Hibernate关系映射(二) 基于外键的双向一对一

    基于外键的双向一对一关联映射 需要在一端添加<one-to-one>标签,用property-ref来指定反向属性引用. 还是通过刚才用户和地址来演示双向一对一关联. 代码演示 一.实体类 ...

  8. Hibernate 基于外键的双向一对一关联映射

    之前简单介绍了基于外键的单项一对一的关联映射关系,本文简单介绍基于外键的双向一对一的关联映射. 1.设计表结构 表结构对于双向一对一来说没有多少改变,只是双向都可以获取到对方. 2.创建Person对 ...

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

    这篇讲解 基于外键的双向一对一关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系.表的设计 2.类结构 Person.java public class Person implements ...

随机推荐

  1. 使用Jedis

    前言 借助Jedis可以在Java上操作Redis. Jedis 到https://mvnrepository.com/去找jar包下载即可. 如果是maven项目: <!-- https:// ...

  2. esxi上引起vm绑定浮动IP无法和外面通信

    在vmware esxi环境通过创建VM安装完成openstack之后,发现创建Instance后网络不通,经过多方面排查,最后确定是vmware esxi标准交换机拒绝“混杂模式”所致,故打开“混杂 ...

  3. RxSwift 系列(四)

    前言 本篇文章将要学习RxSwift中四种转换操作符: map flatMap flatMapLatest scan map 通过使用一个闭包函数将原来的Observable序列转换为一个新的Obse ...

  4. FastReport.Net使用:[33]高亮显示

    1.首先来看下初始报表,很简单很普通. 2.下面对报表改进,90分以上的成绩以绿色显示,60~70分的以橙色斜体显示. 报表设计中选择数据成绩文本框,然后点击工具栏上的“ab突出显示”按钮打开“高亮显 ...

  5. kotlin 类 接口 抽象类 子类类型有限的class 。sealed class

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 用 private 封装,可以防止别人修改. 就好像 内有高压,危险,不让碰.

  6. WNDR4300v2 固件编译

    WNDR4300v2 固件编译 1.从官网下载源码   从官网找到 https://kb.netgear.com/2649/NETGEAR-Open-Source-Code-for-Programme ...

  7. Unity UGUI之Button

    创建Button后,会出现一个Image组件和一个Button组件,以及Button子节点Text(可以删除不影响功能) 其中Image的Image Type中有四个选项--Simple.Sliced ...

  8. 如何使用DotNet 2.0中的应用程序配置 Settings.settings

    对于桌面应用程序,常常会需要记录一些用户配置信息,早期的做法一般是使用读写INI文件的办法.    对于.NET应用程序,并没有提供直接操作INI文件的类,需要调用Win32API,具体办法可以参考: ...

  9. Java Web----Java Web的数据库操作(三)

    Java Web的数据库操作 前面介绍了JDBC技术和JDBC API及API的使用示例,下面详细介绍JDBC在Web中的应用. Java Web----Java Web的数据库操作(一) Java ...

  10. ExtJs 3 自定义combotree

    ExtJs 3 自定义combotree /** * 自定义下拉树,支持初始化值时自动定位树节点. * 还没有考虑性能问题.继承自Ext.form.ComboBox也很浪费. * 代码中的cu.get ...