hibernate真的还是比较花费学习成本的,最近查阅了大量的资料,总算有所收获。在此,总结分享一下令众多初学者晕眩的lazy,inverse,cascade和fetch。
lazy,就是延时加载。
以最简单的parent和child为例子:一个parent可以有多个child,一个child只有一个parent。
当parent类的child属性的lazy为true,那么当select parent的时候,他的child不会马上被select,一直延迟到他的child需要被读写的时候再去select。
当parent类的child属性的lazy为false,那么select parent的时候,他的child会马上被select。
inverse,用于外键维护的控制。
当inverse为false,则在插入表数据之后,会再插入外键维护的记录。
当inverse为true,则在插入表数据的同时,插入外键维护的记录。
在非多对多的表关系中:
还是以parent和child为例子。假设1个parent有3个child,那么:
当inverse为false,则先insert 1 条 parent,再insert 3 条 child,再insert 3 个child的parent ID,一共7次insert。
当inverse为true,则先insert 1 条 parent,再insert 3 条 child,当然这3次insert是同时完成插入parent ID的,所以一共4次insert。
总结:在非多对多的表关系中,inverse永远为ture。
在多对多的表关系中:
中间表的外键维护通常由一方进行维护。
所以2个多方,1个inverse为ture,1个inverse为false。中间表会由inverse为false的一方维护。
总结:选择数据比较多的一方维护中间表的效率会比较高。
cascade,表的级联。
一方面,如果你熟悉数据库,表级联可以设置在数据库上。
另一方面,如果你选择设置在配置文件中,则相应的你的系统会更方便的在各个数据库之间进行移植。
级联具体情况就看业务需求了。关于级联,不明白的可查阅数据库基础理论。没什么好多说的。
fetch,就是加载子表信息所采用的方式,select或者join
以下是我个人对这个属性的理解:
xml配置文件中可以不配置,采用默认的。而他真正的作用在于:
1.通常情况为了保证效率,lazy的配置都是true的。比如有个页面需要显示parent列表,只需要parent的name属性和create time属性,因为不涉及子表信息,lazy为false的配置将大大影响效率。这样,我们就拥有了hibernate的高性能。
2.特殊情况下,我们又希望lazy为false,即当编辑某一个parent的时候,立刻获得parent的子表,乃至孙表的信息(例如当我们采用分层结构时,当信息到视图层时,hibernate的session已经断开了,所以要在逻辑层完成所有信息的载入)。我们就可以在HQL中写left/right outer/inner join fetch实现此功能。这样,我们又获得了临时的灵活性。
转自:http://hi.baidu.com/zh_m_zhou/item/651fe52cb71d0bc2ef10f1e2
相关推荐
Hibernate中Cascade和inverse的区别,讲解的很详细
安装$ npm install hexo-lazyload-image --save用法首先从您的hexo项目的_config.yml添加配置。 lazyload : enable : true onlypost : false # optional loadingImg : # optional eg ./images/loading.gif isSPA : ...
引入JS文件:<script type="text/javascript" src="js/lazyImg.v1.0.js"> 默认情况下: 在IMG中满足以任何一个条件,都会加载图片; 1、没有class属性 2、如果有class属性并且属性中不包含以"lazy-"为前缀的css样式...
Hibernate fetch lazy cascade inverse 关键字
hibernate的类级别检索策略和检索策略的lazy、fetch、batch-size属性使用
Vue模块,用于在应用程序中延迟加载图像。 该项目的一些目标值得注意: 轻巧,功能强大且易于使用 处理任何图像类型 加载图像时添加加载类 同时支持Vue 1.0和Vue 2.0 目录 演示版 要求 1.x或2.x 安装 npm $ npm ...
1. 1)default-init-method ="方法名" 定义在此配置文件中的bean都会执行指定的init方法。 2)default-destroy-...3)default-lazy-init ="false|true" 定义在此配置文件中的bean都会延迟加载。 ....................
这几天训网络最困扰我的问题就是服务器总是莫名其妙自动重启,一旦重启,训练的各种网络就都中断了,之后又得一个一个断点续训练,很费劲 两天之内重启了3次之后我...类似这样的错误,看样子是sda1磁盘文件系统的问题
Lazy Foo' Productions - Beginning Game Programming v2.0 SDL 游戏编程教程 by Lazy Foo CHM 打包下载,包含示例代码,页面代码使用JavaScript Chill着色,看着更舒服了。 官网:lazyfoo.net/tutorials/SDL/index...
dagger2 中使用Lazy或Provider支持循环依赖的建议 Dagger 2.0 目前不支持任何类型的依赖循环。 Dagger 1 允许使用Lazy或Provider依赖包装器。 这里开始了一个问题: : 我已经开始使用在上述问题中发现的示例代码来...
配置以下环境变量以进行部署: BACKPORT_GH_API = 'api_token_for_your_bot' BACKPORT_MAINTAINER = 'bot_listens_to_this_user' BACKPORT_BOT_GH_NAME = 'bot_github_username' BACKPORT_BOT_GH_EMAIL = 'bot_...
fingviewById的代码生成插件,创建以 by lazy 形式声明的 view private val mLvlCommentHistory: ListViewLayout by lazy(LazyThreadSafetyMode.NONE) { findViewById(R.id.lvl_comment_history) } private val ...
在包含配置文件的项目中使用 命令: yo lazy cd build-with-config-exist yo lazy 在未包含任何配置文件的项目中使用 命令: yo lazy --with-profile [config file path] cd build-with-special-config yo lazy --with...
主要介绍了hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法,需要的朋友可以参考下
它既不打算在现实生活中使用,也不是好的编程实践的一个例子,而是要给出一个如何使用包react-lazy-load-image-component及其道具的例子。 观看现场演示: : react-lazy-load-image-component : NPM 包: : ...
lazyload1.9.3,图片延迟随滚动条显示。$(function() { $("img.lazyload").lazyload()});
v-img 该组件旨在替换本地img元素并使用webp!目录 特征输入jpg / png,输出webp(不处理svg / gif) 自动检查您的浏览器是否支持webp并使用它支持云映像服务 阿里云 华为云 秦牛云支持SSR :up_arrow: 回到顶部 安装...
go-lazy-foo:在Go中通过Lazy Foo的SDL教程进行工作
快速选择,删除和切换选项卡 是吗? *厌倦了在多个Chrome Windows&Tabs之间切换 *厌倦了一次删除一个标签 *厌倦了缓慢,迟钝的Chrome 使用LazyTabs,您可以: * 1单击许多窗口之间的选项卡之间的切换 * 1单击一次...
hibernate 中的lazy属性的使用