java之hibernate之基于外键的双向一对一关联映射
这篇讲解 基于外键的双向一对一关联映射
1.考察如下信息,人和身份证之间是一个一对一的关系。表的设计
2.类结构
Person.java
public class Person implements Serializable{
private int id;
private String name;
private IdCard idCard;
public Person() {
}
public Person(String name) {
super();
this.name = name;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IdCard getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
}
IdCard.java
public class IdCard implements Serializable{
private String id;
private String address;
private Person person;
public IdCard() {
// TODO Auto-generated constructor stub
} public IdCard(String id, String address) {
super();
this.id = id;
this.address = address;
} public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} public Person getPerson() {
return person;
} public void setPerson(Person person) {
this.person = person;
}
}
3.映射文件
Person.hbm.xml
<hibernate-mapping package="cn.sxt.pojo">
<class name="Person" table="t_person">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- 基于外键的一对一和多对一的表结构是一样的,所以映射文件也一样,要保证外键是唯一的 -->
<many-to-one name="idCard" column="idCardId" unique="true"></many-to-one>
</class>
</hibernate-mapping>
IdCard.hbm.xml
<hibernate-mapping package="cn.sxt.pojo">
<class name="IdCard" table="t_idCard">
<id name="id">
<generator class="assigned"></generator>
</id>
<property name="address"/>
<!-- 一对一的双向关联 person表示IdCard类中属性
property-ref引用的是 person类中IdCard的属性名
-->
<one-to-one name="person" property-ref="idCard"></one-to-one>
</class>
</hibernate-mapping>
4.测试
public class HibernateTest {
/**
* 生成数据库表的工具方法
* */
@Test
public void testCreateDB(){
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
//第一个参数 是否打印sql脚本
//第二个参数 是否将脚本导出到数据库中执行
se.create(true, true);
}
/**
* 初始化表数据
*/
@Test
public void testInit(){
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
IdCard card1 = new IdCard("110086", "湖北武当");
IdCard card2 = new IdCard("110087", "光明顶");
Person p1 = new Person("张三疯");
p1.setIdCard(card1);
Person p2 = new Person("殷素素");
p2.setIdCard(card2);
session.save(card1);
session.save(card2);
session.save(p1);
session.save(p2);
tx.commit(); } catch (Exception e) {
if(tx!=null)
tx.rollback();
}finally {
HibernateUtil.close();
}
}
/**
*/
@Test
public void testGetData(){
Session session = HibernateUtil.getSession();
Person p1 = (Person)session.get(Person.class, 1);
System.out.println(p1.getName()+"----"+p1.getIdCard().getId()+"----"+p1.getIdCard().getAddress());
System.out.println("-------------------------------------------");
IdCard card = (IdCard)session.get(IdCard.class, "110086");
System.out.println(card.getId()+"------"+card.getAddress()+"----"+card.getPerson().getName());
HibernateUtil.close();
}
}
java之hibernate之基于外键的双向一对一关联映射的更多相关文章
- java之hibernate之基于主键的双向一对一关联映射
这篇 基于主键的双向一对一关联映射 1.依然考察人和身份证的一对一关系,如果采用主键关联,那么其表结构为: 2.类结构 Person.java public class Person implemen ...
- java之hibernate之基于主键的单向一对一关联映射
这篇讲 基于主键的单向一对一关联映射 1.依然考察人和身份证的一对一关系,如果采用主键关联,那么其表结构应该为: 2.类结构 Person.java public class Person imple ...
- Hibernate 基于外键的双向一对一关联映射
之前简单介绍了基于外键的单项一对一的关联映射关系,本文简单介绍基于外键的双向一对一的关联映射. 1.设计表结构 表结构对于双向一对一来说没有多少改变,只是双向都可以获取到对方. 2.创建Person对 ...
- Hibernate 基于外键的单项一对一关联映射
在开发过程中很多时候会用到表与表之间一对一的关联关系,本文简单介绍在Hibernate4中单项一对一的关联映射. 1.设计表结构 2.创建Person对象 3.创建IdCard对象 4.写hbm.xm ...
- Hibernate关系映射(二) 基于外键的双向一对一
基于外键的双向一对一关联映射 需要在一端添加<one-to-one>标签,用property-ref来指定反向属性引用. 还是通过刚才用户和地址来演示双向一对一关联. 代码演示 一.实体类 ...
- Hibernate学习(二补充)关系映射----基于外键的双向一对一
刚刚写的是基于外键的单向一对一. 那么双向一对一就是在单向一对一的基础上稍微改动就可以了. account.java和account.hbm.xml都不用变动 只要我们小小的变动address.j ...
- java之hibernate之基于外键的一对一单向关联映射
这篇讲解基于外键的一对一单向关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系.表的设计 注意:基于外键的一对一关联的表结构和多对一的表结构是一致的,但是,外键是唯一的. 2.类的结构 Pe ...
- hibernate 基于主键的单向一对一关联映射
1.设计表结构 表结构对于基于外键的关联关系来说就少了外键的关联列,并且两张表共用同一个ID,表示一对一. 2.创建Person对象 3.创建IdCard对象 4.写hbm.xml文件 5.生成数据库 ...
- hibernate笔记--基于外键的单(双)向的一对一映射关系
假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射 ...
随机推荐
- rust猜数游戏代码
use std::io; use rand::Rng; use std::cmp::Ordering; fn main() { println!("Guess the number!&quo ...
- centos7安装mysql8 ERROR! The server quit without updating PID file
原因mysql的安装目录在/etc/my.cnf配置不正确或者目录中的文件没有权限导致的,或者日志目录没有权限导致的 使用chwon -R mysql:mysql mysql的日志目录后重启mysq ...
- python selenium chrome 实现自动化登录
1.环境安装 selenium的开发文档网址(英语好的可以直接看这个,写的很详细):http://selenium-python.readthedocs.io/ 因为实现的时候使用的是谷歌浏览器,在运 ...
- plupload如何限制上传文件数量,限制只能上传单个文件
1 完整代码 $(function() { $("#uploader").pluploadQueue({ runtimes : 'html5,gears,flash,silverl ...
- 000 list与map的foreach使用
一:list的使用 1.程序 package com.jun.it.java8; import java.util.ArrayList; import java.util.List; public c ...
- vue-qriously 生成二维码并下载、cliploard复制粘贴
xxx.vue <template> <a-modal class="dialogRecharge" title="活动链接及二维码" v-m ...
- docker安装并运行redis
拉取镜像: [mall@VM_0_7_centos ~]$ sudo docker pull redis:3.2 [sudo] password for mall: 3.2: Pulling from ...
- Sublime用正则表达式进行逗号分隔实现列的替换
eg: ([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*).* 这是取前面10列,后面的不管 ...
- IEnumerable是什么
首先怎么认识一个对象 IE+number+able IE数字 可能 从名字上看不出什么玩意,以至于很久都没人真正认识这个接口 先看官方的解释 IEnumerable Interface Expose ...
- [LeetCode] 202. Happy Number 快乐数
Write an algorithm to determine if a number is "happy". A happy number is a number defined ...