(7)hibernate中OneToMany单向
OneToMany:在One一方添加外键,比如Message和Comment,就在Message这一方添加set
Message.hbm.xml:
<hibernate-mapping><class name="model.Message" table="MESSAGE"><id name="id" type="int"><column name="ID" /><generator class="native" /></id><property name="content" type="java.lang.String"><column name="CONTENT" /></property><property name="title" type="java.lang.String"><column name="TITLE" /></property><set name="comments" lazy="extra"><key><column name="M_ID" /></key><one-to-many class="model.Comment" /></set></class>
</hibernate-mapping>
其中set里面的key用来指定在对方(Comment)的外键名称,<one-to-many/>里面的class表示set里面的对象类型
package model;import java.util.HashSet;
import java.util.Set;public class Message {
private int id;
private String content;
private String title;
private Set<Comment> comments;public Message() {comments=new HashSet<Comment>();
}
public void addComment(Comment comment) {comments.add(comment);
}
public Set<Comment> getComments() {return comments;
}
public void setComments(Set<Comment> comments) {this.comments = comments;
}
public int getId() {return id;
}
public void setId(int id) {this.id = id;
}
public String getContent() {return content;
}
public void setContent(String content) {this.content = content;
}
public String getTitle() {return title;
}
public void setTitle(String title) {this.title = title;
}}
void test() {Session s=null;try {s=HibernateUtil.getSession();s.beginTransaction();Comment c1=new Comment();c1.setContent("dewesf");s.save(c1);Comment c2=new Comment();c2.setContent("fsdFSDFSD");s.save(c2);Message msg=new Message();msg.setTitle("test");msg.setContent("testtest");msg.addComment(c1);msg.addComment(c2);s.save(msg);s.getTransaction().commit();} catch (Exception e) {// TODO 自动生成的 catch 块e.printStackTrace();s.getTransaction().rollback();}finally {HibernateUtil.closeSession(s);}}
在msg类中添加addComment方法,便于往集合加入元素,结果发5条sql,3条插入(save),2条更新(往集合添加元素,改变了缓存中的msg对象,就会发出更新,为什么是2条?因为往集合添加元素实际上是在comment中设置msg_id,添加几个元素就发出几条update的sql语句)
void test1() {Session s=null;try {s=HibernateUtil.getSession();s.beginTransaction();Message msg=s.load(Message.class, 1);for(Comment c:msg.getComments()) {System.out.println(c.getContent());}s.getTransaction().commit();} catch (Exception e) {// TODO 自动生成的 catch 块e.printStackTrace();s.getTransaction().rollback();}finally {HibernateUtil.closeSession(s);}}
load延迟加载,一开始只需要msg对象,就只发一条sql(这条sql除了comments属性其他属性都通用),然后需要msg里面的comments就需要再发一条sql,所以2条sql
void test2() {Session s=null;try {s=HibernateUtil.getSession();s.beginTransaction();Message msg=s.load(Message.class, 1);System.out.println(msg.getComments().size());s.getTransaction().commit();} catch (Exception e) {// TODO 自动生成的 catch 块e.printStackTrace();s.getTransaction().rollback();}finally {HibernateUtil.closeSession(s);}}
获取size同样也是2条sql,一条取普通属性,一条取comments,如果需要用到size,用select count(ID)较为智能,效率较高,所以可以在set里面设置lazy=“extra”
(7)hibernate中OneToMany单向相关推荐
- hibernate中one-to-many实例一
参考:http://hi.baidu.com/ohaozy/blog/item/ed486a33bc83cf48ac4b5f75.html 下面是我调试过的代码 通过简单的例子说明这几个关系: 以下测 ...
- hibernate初探之单向一对多映射
什么叫做单向一对多的映射呢? 我们首先要知道映射是有方向的,分为单向和双向. 比如班级和学生.站在班级的角度,一个班级可以有多个学生, 在这里班级就是"一"方 学生就是" ...
- (5)OneToMany单向、双向manytoone
一.OneToMany单向 OneToMany说明是一个组知道有哪些成员,而成员不知道自己是哪个组(这是类层面的理解).数据库方面还是多端(User)有外键属性. 若两个表中只写OneToMany,则 ...
- hibernate(七) hibernate中查询方式详解
序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...
- Hibernate 中配置属性详解(hibernate.properties)
转自:https://blog.csdn.net/shudaqi2010/article/details/70324843 Hibernate能在各种不同环境下工作而设计的, 因此存在着大量的配置参数 ...
- JPA中实现单向一对多的关联关系
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...
- hibernate中@Entity和@Table的区别
Java Persistence API定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库. 这些普通Java对象被称作Entity Bean. 除了是用Java Pers ...
- Hibernate中的一对多XML映射
一对多关系指出一个实体的单个实例与另一个实体的多个实例相关联. 换句话说,一个表中的每个记录与另一个表中的多个记录相关联. 让我们看看如何通过XML映射文件在Hibernate中定义这种关系. 1.实 ...
- Hibernate中inverse属性与cascade属性
Hibernate集合映射中,经常会使用到"inverse"和"cascade"这两个属性.对于我这样,Hibernate接触不深和语文水平够烂的种种因素,发现 ...
最新文章
- 服务器架设笔记——编译Apache及其插件
- 中国团队 Nature 新冠论文被指图片造假,科研论文不端“何时休”
- 封装、继承和构造函数
- python画三维几何图-Python下opencv使用笔记(二)(简单几何图像绘制)
- jQuery lazyload 懒加载
- 如何保护数据中心免受电子腐蚀和突然故障的威胁?
- 转 VOSM:国人写的ASM/AAM人脸拟合库
- 厉害了,我的清华大学,各系横幅让网友看花眼,尤其是第3条
- 《OpenGL编程指南(原书第9版)》——3.3 顶点规范
- 一统江湖的大前端(5)editorconfig + eslint——你的代码里藏着你的优雅
- IDUdpServer研究心得
- 2699元起!格力首款5G手机悄然上架:骁龙765G处理器
- postgresql unsupported frontend protocol 1234.5680问题
- 春节快乐,iPhone11 抱回家!
- 牛客 小米校招 最大新整数 单调栈
- IG02数据准备(翻译)
- 每个Web开发者都应读的文章:HTML5设计原理
- Oracle数据库学习笔记——数据完整性(下)
- 英语四级作文备战全攻略
- 计算机一级等级考试模拟试题,全国计算机一级等级考试模拟试题.docx
热门文章
- Penn Treebank数据集介绍+句法分析parsed的基本语法+句法分析基础知识+NLP常用公开数据集汇总及下载
- 静态时序分析简明教程(五)]生成时钟的sdc约束方法
- 年涨幅破300%,Peloton何以在健身赛道按下加速键?
- 【IOS】旋转图片和截取图片
- Mixlab推荐:未来,在于问题而非答案,我们请你提个问题
- 【你问我答】unity实现一个刮刮乐效果
- SpringBoot的Cacheable缓存问题一则
- Leetcode--Java--226. 翻转二叉树
- 手撕CNN神经网络(二)反向传播(back propagation)
- 黑猩猩优化算法python代码(详细注释)