博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate一对一外键双向关联
阅读量:7092 次
发布时间:2019-06-28

本文共 6198 字,大约阅读时间需要 20 分钟。

关联是类(类的实例)之间的关系,表示有意义和值得关注的连接。

本系列将介绍Hibernate中主要的几种关联映射

Hibernate一对一主键单向关联

Hibernate一对一主键双向关联
Hibernate一对一外键单向关联
Hibernate一对一外键双向关联
Hibernate多对一单向关联
Hibernate多对一双向关联

Hibernate多对多关联

代码都写有注释,主要包括(核心配置文件,实体映射文件,实体类,测试类,数据库)主要操作有增删改查。

本篇主要介绍Hibernate一对一外键双向关联:

hibernate.cfg.xml

com.mysql.jdbc.Driver
root
123456
org.hibernate.dialect.MySQLDialect
true
true

People.hbm.xml

IdCard.hbm.xml

People.java

package com.great.entity5;public class People {    // 一对一外键双向关联    private int id;    private String pName;    private IdCard idCard;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getpName() {        return pName;    }    public void setpName(String pName) {        this.pName = pName;    }    public IdCard getIdCard() {        return idCard;    }    public void setIdCard(IdCard idCard) {        this.idCard = idCard;    }}

IdCard.java

package com.great.entity5;public class IdCard {    // 一对一外键双向关联    private int card_id;    private String cardCode;    private People people;    public int getCard_id() {        return card_id;    }    public void setCard_id(int card_id) {        this.card_id = card_id;    }    public String getCardCode() {        return CardCode;    }    public void setCardCode(String cardCode) {        CardCode = cardCode;    }    public People getPeople() {        return people;    }    public void setPeople(People people) {        this.people = people;    }}

TestOneToOneForeignBoth.java(测试类)

package com.great.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;import com.great.entity5.IdCard;import com.great.entity5.People;public class TestOneToOneForeignBoth {    static Session session;    // 一对一外键双向关联    @BeforeClass    public static void setUpBeforeClass() throws Exception {        // 加载hibernate主配置文件        Configuration cfg = new Configuration().configure();        // 构建session工厂        SessionFactory sf = cfg.buildSessionFactory();        // 打开session        session = sf.openSession();    }    @AfterClass    public static void tearDownAfterClass() throws Exception {        // 关闭session,释放资源        session.close();    }    // select1,通过people    @Test    public void testOneToOneSelect1() {        People people = (People) session.get(People.class, 1);        System.out.println("身份证号码:" + people.getIdCard().getCardCode());        System.out.println("姓名是:" + people.getpName());    }    // select2,通过idCard    @Test    public void testOneToOneSelect2() {        IdCard idCard = (IdCard) session.get(IdCard.class, 1);        System.out.println("身份证号码:" + idCard.getCardCode());        System.out.println("姓名是:" + idCard.getPeople().getpName());    }    // insert1数据,通过保存people来插入数据    @Test    public void testOneToOneSave1() {        Transaction ts = session.beginTransaction();        IdCard idCard = new IdCard();        idCard.setCardCode("124567891234566");        People people = new People();        people.setpName("张起灵2");        idCard.setPeople(people);// 可加可不加        people.setIdCard(idCard);        session.save(people);        ts.commit();    }    // insert2数据,通过保存inCard来插入数据    @Test    public void testOneToOneSave2() {        Transaction ts = session.beginTransaction();        IdCard idCard = new IdCard();        idCard.setCardCode("124567891234566");        People people = new People();        people.setpName("张起灵2");        people.setIdCard(idCard);// 必须加,否则失败        idCard.setPeople(people);        session.save(idCard);        ts.commit();    }    // delete1数据,删除people,级联删除inCard。发出两条查询两条删除语句    @Test    public void testOneToOneDelete1() {        Transaction ts = session.beginTransaction();        People people = (People) session.get(People.class, 12);        session.delete(people);        ts.commit();    }    /*     * delete2数据,通过删除idCard,级联删除people.     * delete数据。发出两条查询两条删除语句,也是先删除people再删除idCard     */    @Test    public void testOneToOneDelete2() {        Transaction ts = session.beginTransaction();        IdCard idCard = (IdCard) session.get(IdCard.class, 14);        session.delete(idCard);        ts.commit();    }    // 更新数据1,通过people进行更新    @Test    public void testOneToOneUpdate1() {        Transaction ts = session.beginTransaction();        People people = (People) session.get(People.class, 11);        people.setpName("张起灵1");        people.getIdCard().setCardCode("511381199612120254");        /*         * session.update(people);         * update和saveOrUpdate的区别在于后者在数据库中不存在此对象的情况下插入,所以效率低。         */        session.saveOrUpdate(people);        ts.commit();    }    // 更新数据2,通过idCard进行更新    @Test    public void testOneToOneUpdate2() {        Transaction ts = session.beginTransaction();        IdCard idCard = (IdCard) session.get(IdCard.class, 8);        idCard.getPeople().setpName("张起灵3");        idCard.setCardCode("311381199612120254");        session.update(idCard);        ts.commit();    }}

 

 

 

数据库:

people1表

三个字段id pName card_id(外键)

idcard1表

两个字段id cardCode

注意:在people表的card_id上建立外键关系。

转载地址:http://pdiql.baihongyu.com/

你可能感兴趣的文章
[LeetCode] Design HashSet 设计HashSet
查看>>
一个字等于多少字节?
查看>>
Redis3:持久化
查看>>
Velocity 语法(转)
查看>>
利用cmd命令创建wifi热点
查看>>
Win7 下面查看当前端口对应的进程名字(XP同样适用)
查看>>
linux下网卡配置
查看>>
动态查找---->B+树、B*树
查看>>
JSON
查看>>
hdu 1261(排列组合)
查看>>
DataTable转成字符串复制到txt文本
查看>>
2013年3月20日
查看>>
mysql数据库的简单语句的介绍(1)
查看>>
HDU 2829 Lawrence (斜率DP)
查看>>
visual studio 2012 update3
查看>>
特征值和特征向量的几何意义、计算及其性质
查看>>
Spring framework3.2整合hibernate4.1报错:No Session found for current thread
查看>>
zqgame《每日一言》
查看>>
前端与后端分离的架构实例(一)
查看>>
LoadRunner性能分析指标解释
查看>>