单向的many-to-one

案例:

班级和学生

父亲和子女

单向:只能由其中一方维护关系

Many-to-one中有many的一方法维护或者体现两者之间的关系。

单向的many-to-one描述学生和班级的关系。

 create table t_clazz
(
cid int primary key auto_increment,
cname varchar not null
);
create table t_ student
(
sno int primary key auto_increment,
snamn varchar,
cid int,
constraint fk_id foreign key(cid) references t_clazz(id)
);

3.1单向many-to-one数据库模型

数据库还是主外键关系。

3.2单向many-to-one java模型

3.3单向many-to-one配置

3.4进行crud操作

3.4.1添加班级信息

主表中添加数据

 /***
* 添加班级信息
* ***/
@Test
public void testSaveClasses(){
//1获得会话session
Session session=sf.openSession();
//2开启事务
Transaction tr=session.beginTransaction();
//3进行增加操作
Classes cls = new Classes();
//cls对象封装数据
cls.setCname("java逆袭班");
session.save(cls);
//提交事务
tr.commit();
//释放资源
session.close();
}

3.4.2 添加学生信息(1)

将学生分配到已经存在的某个班级

 /***
* 添加学生信息,同时建立和已存在班级的关系
* ***/
@Test
public void testSaveStudent(){
//1获得会话session
Session session=sf.openSession();
//2开启事务
Transaction tr=session.beginTransaction();
//创建学生对象
Student stu=new Student();
stu.setSname("逆袭的典范");
//查询建班级对象
Classes cls=(Classes) session.get(Classes.class, 1);
stu.setCls(cls); //建立了学生和班级的关系(cls必须包含唯一标识)
session.save(stu);
//提交事务
tr.commit();
//释放资源
session.close();
}

3.4.3添加学生信息(2)

添加学生信息,同时添加班级信息,建立关系

给many-to-one加入cascade属性=“save-update”级联保存

 /***
* 添加学生信息,同时建立和新班级的关系
* ***/
@Test
public void testSaveStudent2(){
//1获得会话session
Session session=sf.openSession();
//2开启事务
Transaction tr=session.beginTransaction();
//创建学生对象
Student stu=new Student();
stu.setSname("逆袭的典范");
//创建班级对象
Classes cls=new Classes();
cls.setCname("盟主修炼班");
stu.setCls(cls); //建立了学生和班级的关系(cls必须包含唯一标识)[A1]
session.save(stu);
//提交事务
tr.commit();
//释放资源
session.close();
}

对比:如果通过one的一方关联保存many的一方,数据保存后,进行更新操作建立关系

通过many的一方关联保存one的一方法,直接执行两条insert语句,效率高。

3.4.4更新学生信息

同时更新班级信息

 @Test
public void testUpdateStudent()
{
//1获得会话session
Session session=sf.openSession();
//2开启事务
Transaction tr=session.beginTransaction();
//查询学生对象
Student stu=(Student) session.get(Student.class, 1);
//修改属性
stu.setSname("东方必败");
//获得stu对象关联的班级对象
Classes cls=stu.getCls();
cls.setCname("java基础版");
//创建班级对象
session.update(stu);
//提交事务
tr.commit();
//释放资源
session.close();
}

3.4.5查询学生信息

同时关联该学生的班级信息

 /***
* 查询学生信息
* 存在着延迟加载的现象.
* ***/
@Test
public void testSelectStudent()
{
//1获得会话session
Session session=sf.openSession();
//2开启事务
Transaction tr=session.beginTransaction();
//查询所有学生对象
List<Student> slist=session.createCriteria(Student.class).list();
//遍历学生的集合
for(Student s:slist)
{
System.out.println(s.getSname()+"\t\t"+s.getCls().getCname());
}
//提交事务
tr.commit();
//释放资源
session.close();
}

3.4.6删除学生信息

删除子表中的数据,直接删除。

 /***
* 修改学生信息
* ***/
@Test
public void testDeleteStudent()
{
//1获得会话session
Session session=sf.openSession();
//2开启事务
Transaction tr=session.beginTransaction();
//查询学生对象
Student stu=(Student) session.get(Student.class, 1);
session.delete(stu);
//提交事务
tr.commit();
//释放资源
session.close();
}

Hibernate单向多对一对象关系模型映射的更多相关文章

  1. Hibernate双向一对一对象关系模型映射

    一个员工一辆车:one-to-one 实现一:让汽车表中的外键唯一 create table emp ( eid int primary key auto_increment, ename varch ...

  2. python下申明式的对象关系DB映射器--Pony

    之前看到了Sails.js的waterline提供了声明式的关系型对象与DB的映射器,惊为天人,可以说是极大地提升了效率. 利用waterline的对象关系模型,用户可以直接使用javascript语 ...

  3. Hibernate入门5持久化对象关系和批量处理技术

    Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...

  4. Hibernate单向一对多对象关系模型映射

    1 hibernate 的对象关系映射 Orm: 类-----表 属性------字段 对象------记录 表:在数据库中存在主外键的关系,反向工厂类是由表生成,在由表生成类的时候,类和类之间存在者 ...

  5. Hibernate基础学习(五)—对象-关系映射(下)

    一.单向n-1 单向n-1关联只需从n的一端可以访问1的一端. 域模型: 从Order到Customer的多对一单向关联.Order类中定义一个Customer属性,而在Customer类不用存放Or ...

  6. hibernate单向多对一映射

    n21: 1.new 两个实体类,一个代表"多"的一端,一个代表"一"的一端. Customer类: public class Customer { priva ...

  7. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. Hibernate基础学习(四)—对象-关系映射(上)

    一.映射对象标识符      Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键值来识别或区分同一个表的不同记录.Hibernate使用对象标识符(OID)来建立内存中的对象和数 ...

  9. ORM对象/关系模型

    1 ORM 对象关系映射(ORM)提供了概念性的.易于理解的模型化数据的方法.ORM方法论基于三个核心原则: 简单:以最基本的形式建模数据. 传达性:数据库结构被任何人都能理解的语言文档化. 精确性: ...

随机推荐

  1. Redis数据库的使用与介绍

    本周11-15号开始用Redis数据库在现有的平台基础上开发一个独立模块,这是一个边学习.边记录.边交流.边开发.边总结的过程.大部分随笔都是个人的“工作日志”,旨在记录自己学习过程中收集的一些资料, ...

  2. 安装wampserver 2.5的时候出现丢失MSVCR100.dll的解决办法。

    转载地址:http://www.mafutian.net/127.html

  3. 自己总结的USB数据结构及其描述符

    背景: USB理论知识光看着空想总觉着丢三落四,好像哪里没法理解到位,自己做个总结. 正文: 1. USB通信的最基本单位是“包”.如果把“包”肢解的话,可以分为各种“域”(7类,即一串二进制数.每类 ...

  4. poj.1703.Find them, Catch them(并查集)

    Find them, Catch them Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I6 ...

  5. 贝叶斯决策_bayes(新闻分类)

    1.简单例子引入 2.先验概率 3.后验概率 4.最小错误率决策 5.最小风险贝叶斯决策 1. 贝叶斯公式 2简单例子 正常情况下,我们可以快速的将街上的人分成男和女两类.这里街上的人就是我们观测到的 ...

  6. 解决Linux CentOS中cp -f 复制强制覆盖的命令无效的方法

    Linux下默认cp命令是有别名的(alias cp='cp -i'),无法在复制时强制覆盖,即使你用 -f 参数也无法强制覆盖文件,下面提供几个从网上找的Linux下cp命令覆盖的方法. 1)取消c ...

  7. Swift2.1 语法指南——可空链式调用

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  8. C#GDI+编程基础(二)

    pen类:绘制指定宽度和样式的直线.使用DashStyle属性绘制几种虚线,可以使用各种填充样式(包括纯色和纹理)来填充Pen绘制的直线,填充模式取决于画笔或用作填充对象的纹理. 创建画笔: //用指 ...

  9. javascript基础07

    javascript基础07 1.节点 元素.childNodes : 属性 只读 属性 子节点列表集合 元素.childNodes 只包含子节点,不包含孙节点 DOM节点的类型有很多种,w3c标准有 ...

  10. iOS 简单音乐播放器 界面搭建

    如图搭建一个音乐播放器界面,具备以下几个简单功能: 1,界面协调,整洁. 2,点击播放,控制进度条. 3.三收藏歌曲,点击收藏,心形收藏标志颜色加深. 4,左右按钮,切换歌曲图片和标题. 5,点击中间 ...