怎么通过Hibernate指定要获取到的层次?

问题描述

情景:博客文章类(blog),评论类(comment),评论人类(user)层级关系为: blog.getComments().get(0).getUser().getName();blog -> comment -> user在Hibernate中,我获取到blog,然后返回,那么再用blog获取comment时,就会报sesion close了,这也是OpenSessionInView的存在价值,那么请问:我是否能通过Hibernate指定要获取到的层次呢?比如,如果指定为1,那么漫游到comment不会报错,漫游到user才会报错,如果指定到2,那么漫游到user也不会报错了。

解决方案

只能通过Hibernate获取漫游的路径。比如blog 下面有categorys和comment两个list,Hibernate不会帮你load他们出来,假设你有10个blog,设定层级(假设Hibernate能设置),那你执行的sql的顺序是:先用一个sql获得10个blog,然后为每个blog各发送2条SQL得到categorys和comment。哪么你一共要发送20条SQL,仅仅是为了这个10个blog。所以Hibernate不提供这样的功能是合理的。但也不是没有办法,设置fetch的方式为join,这个设置是可以在程序运行的时候根据需要动态设置它。通过Criteria或者DetachedCriteria可以动态设置FetchMode的示例:String[] associatePaths = new String[]{"comment","comment.user"};Criteria criteria = detachedCriteria.getExecutableCriteria(session); for (int i = 0; i < associatePaths.length; i++) { criteria.setFetchMode(associatePaths[i], FetchMode.JOIN); }criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);//设置返回的是实体对象,否则返回的数组List result = criteria.list();//返回的结果则初始化了comment和comment下面的user

时间: 2024-12-25 17:10:00

怎么通过Hibernate指定要获取到的层次?的相关文章

hibernate的session获取和关闭的问题

问题描述 hibernate的session获取和关闭的问题 我刚才看到有人说在实际的项目中是在业务层获取Session然后把此session传给dao层,将数据持久化或其他的操作.但是我看的很多代码上都是在dao层获取session的..事实是怎样的?? 其实我觉得业务层获取session很容易理解...但是我手头的三本jee的书都是在dao层获取session.... 解决方案 hibernate关于session的关闭问题获取hibernate的Session解决Hibernate的Ses

hibernate指定jdbc配置文件

hibernatge如何指定jdbc配置文件呢? jdbc配置文件型如: Java代码   jdbc.driverClassName=com.mysql.jdbc.Driver   jdbc.url=jdbc:mysql://182.92.94.71:3306/test   jdbc.username=root   jdbc.password=123456     在hibernate的配置文件中有两种方式指定jdbc配置文件 方式一: Xml代码   <bean           class

函数计算实战-java爬虫程序从指定网站获取图片并存储到对象存储中的例子

前段时间阿里云函数计算推出了Java8版本的编译环境,我结合一个java语言来完成函数计算的代码编写,该示例主要是模拟一个网站图片爬虫,把指定网站的指定页面的图片全部获取并保存到对象存储中,画了一个简单的架构图如下: 流程讲解: 用户输入某个网站地址,并把爬虫系统部署到函数计算上,执行后函数计算会自动把某网站的图片抓取到本地,并通过内网的方式上传到对象存储(OSS)上.这里涉及到两段代码,一段是网站爬取图片的代码,一段是把图片上传到对象存储(略),我们下面结合上面的框图来看看代码构成.  在函数

批处理(bat)实现全盘搜索指定文件获取其完整路径方法大全_DOS/BAT

废话不多说,直接上代码,额,想用的话,自己保存成bat文件即可. [方案一]for /f + dir @echo off rem 指定待搜索的文件 set "FileName=BatHome_Batcher.txt" echo 正在搜索,请稍候... for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( if exist %%a:\ ( for /f "delims=" %%b in ('

php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)_php技巧

本文实例分析了php文件操作的方法.分享给大家供大家参考,具体如下: 一.删除文件 unlink() 语法: int unlink(string filename); 返回值: 整数 函数种类: 文件存取.如: unlink("tmp/test.txt"); 二.获取文件夹下面的文件名 $dir = "message/"; // 文件夹的名称 if (is_dir($dir)){ if ($dh = opendir($dir)){ while (($file = r

html-&amp;amp;amp;nbsp;在谷歌浏览器中显示成一个方框,怎么解决呢

问题描述 &nbsp:在谷歌浏览器中显示成一个方框,怎么解决呢 如题,求有经验的指点下,ie和火狐都没问题,其他地方也没问题,就这里 <div class="STYLE1" id="Div1"><div align="center" class="STYLE11"><a href="www.chi-biotech.net"><img src="sr

php获取指定日期之间的各个周和月的起止时间_php实例

根据指定的前后两个日期,计算这两个日期之间各个周的起始时间和结束时间,以及各个月的起始时间和结束时间 日志格式化类 Date.class.php 复制代码 代码如下: <?php class Datefmt{    function __construct() {}   /**    * 根据指定日期获取所在周的起始时间和结束时间    */   public function get_weekinfo_by_date($date) {     $idx = strftime("%u&qu

javascript 获取HTMl文件指定元素的代码_javascript技巧

获取HTML文件的指定元素 获取HTML文件的元素Body 获取HTML文件的元素H2 获取HTML文件的元素P

关于hibernate的session何时获取的问题

问题描述 关于hibernate的session何时获取的问题 http://zhidao.baidu.com/link?url=wttsNVBIGk7vmHOVydePyPWPPRuKKuy6b7coinmVGlyL6p4CZObGxJWplj8tqgMe-QN6MrVB6G0AnDx5tRhH-q 这个地方说的是否正确呢??实际项目开发中是怎么样的?? 解决方案 实际应用中一般会spring+hibernate,spring控制hibernate的session,通过AOP提供session