0 0

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

情景:
博客文章类(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也不会报错了。
2008年6月22日 10:45

1个答案 按时间排序 按投票排序

0 0

采纳的答案

只能通过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

2008年6月22日 12:11

相关推荐

    hibernate父亲与孩子

    同时,我们可以利用Hibernate的Criteria API或HQL(Hibernate Query Language)来编写高效的查询,以获取特定层次或路径的节点。 5. **缓存策略**:对于大型树结构,缓存策略的设置至关重要。Hibernate提供了第一级...

    hibernate验证框架学习

    这通常涉及到实现 `MessageInterpolator` 接口,并通过 `Validation.byProvider(HibernateValidator.class).configure().messageInterpolator(...)` 来配置。 #### 五、分组约束 ##### 5.1 请求分组 为了更好地...

    hibernate教程

    实体Bean是表示数据库表的对象形式,在Hibernate中通过注解进行配置,可以实现对象与数据库表之间的映射。 ##### 3.2 用EJB3注解进行映射 - **声明实体bean**: - 使用`@Entity`注解标记类为实体。 - 使用`@...

    hibernate4.1中文api

    - **Hibernate配置**: 配置`hibernate.cfg.xml`文件来设置数据库连接信息、指定映射文件位置等。 - **构建与Maven**: 使用Maven作为项目构建工具,添加Hibernate依赖到`pom.xml`文件中。 - **启动和助手**: 创建...

    hibernate annotation 中文文档

    Hibernate 通过注解的方式简化了实体Bean的配置过程,使得开发者可以更方便地管理数据库表与实体Bean之间的映射关系。 ##### 2.2 用 EJB3 注解进行映射 EJB3 注解是 Hibernate 用来标注实体Bean的一种标准方式,它...

    MyEclipse中hibernate的配置

    - 配置完成后,MyEclipse会自动添加所需的Hibernate库到项目的类路径中。 4. **创建SessionFactory配置文件**: - MyEclipse会自动生成`hibernate.cfg.xml`文件以及`SessionFactory`的Java配置文件。 - 用户可以...

    hibernate_3配置文件参数汇总

    3. **数据源属性**:`hibernate.connection.datasource` 用于指定数据源的JNDI名字,这在应用服务器环境中常见。配合`hibernate.jndi.*`属性,可以配置JNDI提供者的URL和InitialContextFactory类。这样,Hibernate...

    Hibernate缓存,性能优化

    一级缓存是Hibernate中最基础的缓存层次,它的生命周期与Session绑定。当Session开启时,一级缓存被创建;当Session关闭或flush后清空时,一级缓存被销毁。一级缓存的使用无需任何配置,是Hibernate默认提供的缓存...

    hibernate缓存

    2. **迭代器(Iterator)**:使用`iterator`方法查询时,Hibernate同样会先尝试从缓存中获取结果,如果缓存中没有,则执行SQL查询并将结果返回。 3. **负载(Load/Get)**:`load`和`get`方法用于加载实体对象,其中...

    Hibernate与Struts集成

    1. **模型层的设计与实现**:包括使用业务代理模式、模型层通过Hibernate完成业务数据的持久化等。 2. **业务代理工厂类的功能与作用**:负责构造业务代理类实例。 3. **在Struts Action中访问业务代理类的方法**:...

    hibernate annotation帮助文档

    - **声明基本的属性映射**:使用 `@Column` 注解来指定如何将实体的属性映射到数据库表中的列。 - **声明列属性**:可以进一步使用 `@Column` 注解的属性(如 `name`, `nullable`, `length`)来细化列的映射规则。...

    Hibernate框架详细讲解

    1. **简化数据库访问**:Hibernate框架能够有效地避免编写复杂的SQL语句,提供了一种更为高级的抽象层次来处理数据存储问题。 2. **提高开发效率**:Hibernate提供了多种自动化工具,如代码生成器等,可以自动生成...

    hibernate入门与概述

    写入时,Java应用通过setter方法设置属性,Hibernate通过getter方法获取属性以生成SQL;读取时,Hibernate通过setter设置属性,Java应用通过getter获取属性。 - **基本数据类型和包装类型**:推荐使用包装类型(如...

    hibernate 中文注解

    - **嵌入式对象(又名组件):** 通过`@Embedded`注解将一个类作为另一个类的一部分映射到同一张表中。 - **无注解之属性的默认值:** 如果没有显式使用注解,Hibernate会默认将类的属性映射到表中的列。 - **映射...

    Hibernate性能优化

    《Hibernate性能优化》 ...总结,Hibernate性能优化是一个多方面、多层次的过程,涉及到配置、SQL、实体设计、查询策略、事务管理等多个方面。开发者应结合实际业务场景,有针对性地进行优化,以达到最佳的系统性能。

    hibernate学习文档

    通过 Hibernate,开发者可以将 Java 对象映射到数据库表,并执行 CRUD 操作,而无需直接编写 SQL 代码。 #### 为什么选择 Hibernate? - **角色细分**:引入 Hibernate 可以使得开发团队中的角色更为细分,程序员...

    J2EE电子商务系统开发从入门到精通:基于Struts和Hibernate技术实现

    ### J2EE电子商务系统开发从入门到精通:基于...通过以上内容,我们可以了解到J2EE电子商务系统的开发过程,不仅涵盖了理论知识,还涉及到了实践操作,为读者提供了从零开始学习J2EE、Struts和Hibernate技术的机会。

    strus2 hibernate spring分页技术

    2. 使用Spring注入Hibernate的SessionFactory,通过Session获取Criteria或Query对象,设置分页条件。 3. 调用Criteria的setFirstResult和setMaxResults方法,对应SQL的OFFSET和LIMIT。 4. 执行查询,获取分页结果,...

    hibernate开发指南

    使用Hibernate,实体类可以被映射到数据库表,通过@Entity注解标识实体类,@Table注解指定表名,@Id注解标识主键,以及其他字段的映射注解如@Column。 5. Session与事务 Session是Hibernate的工作单元,负责保存...

    hibernate参考手册中文版

    通过Hibernate,开发者可以将Java对象映射到关系型数据库中的表,简化了数据访问层的开发工作。 #### 二、安装与配置 - **环境搭建**: - Java环境:确保安装了合适的JDK版本。 - 数据库环境:支持多种关系型...

Global site tag (gtag.js) - Google Analytics