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 ...
随机推荐
- HDU 6199gems gems gems (DP)
gems gems gems Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 图形管线之旅 Part3
原文:<A trip through the Graphics Pipeline 2011> 翻译:往昔之剑 转载请注明出处 此时,我们一路上通过多个驱动层和命令处理器将draw ...
- 第10天-JavaScript正则表达式
正则有什么用 给定的字符串是否符合正则表达式的过滤逻辑 通过正则表达式,从字符串中获取我们想要的特定部分 替换字符串满足正则表达式的字符 例如:验证邮箱.手机号.银行卡.采集器(爬虫).中奖信息133 ...
- linux——(4)磁盘与文件系统管理
概念一:linux-ext2文件系统 ext2在分区的时候会分成多个组块(block group)和一个启动扇区(boot sector),每一个组块内又有superblock.File system ...
- spring完成自动装配
让spring完成自动装配 Autowiring 解决标签为javaBean注入时难以维护而实现的 下面是几种autowire type的说明: 1,byname:试图在容器中寻找和需要自动装配的属性 ...
- tyvj Easy
Easy [描述 Description] 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则 有n次点击要做,成功了就是o,失败了就是x,分 ...
- CodeForces - 1017D The Wu
题面在这里! 比较显而易见的暴力,O(2^(2n) + 2^n * 100) 就可以直接做了 #include<bits/stdc++.h> #define ll long long us ...
- CROC 2016 - Qualification C. Hostname Aliases map
C. Hostname Aliases 题目连接: http://www.codeforces.com/contest/644/problem/C Description There are some ...
- mysql存储过程导入表
运用存储过程,把用户表一数据导入用户表二 DELIMITER @@ CREATE PROCEDURE imp_to_user2() BEGIN – 声明一个标志done, 用来判断游标是否遍历完成 D ...
- SEPIC 单端初级电感转换器 稳压器 -- Zeta 转换器
single ended primary inductor converter 单端初级电感转换器 SEPIC(single ended primary inductor converter) 是一种 ...