开发FLex约有3年,而且每次都使用了Hibernate,每次都遇到了lazy=true的问题,每次也都用非常愚笨的办法来解决。先把数据从数据库中取出,
在转换之前清除掉不需要的属性。
虽说比较郁闷,但在性能与开发效率上勉强能满足需求。本文提供一个可以彻底解决Hibernate的lazy=true的问题的方案。
1)下载RichLazyHibernate和flex相关的demo,网址为http://code.google.com/p/rich-hibernate-lazy/downloads/list ;
2)根据中文档搭建后台hibernate的运行环境。(此处不再详述,本blog也将会有相关的文章介绍,也可以从网站下载中文文档);
3)根据flex代码获取。 获取afuer_richLazyHibernate_flex.swc,放在自己的项目中。(注:此处采用Flex4.5sdk,可以直接换用其他的sdk编译)
4)这样就可以使用Flex了,首先介绍使用LazyHttpService,这个类继承HttpService。使用方法如下所示:
<rlh:LazyHttpService id="httpService" url="http://localhost:8080/lazyBaseSpringDaoDemo/userView/list"
lazyObj="roles,organization" result="httpService_resultHandler(event)"/>
注:lazyObj="roles,organization" 为当前查询类的关联属性
5) 直接使用LazyDatagrid,继承自Datagrid:
<rlh:LazyDatagrid id="lazyDatagrid" y="50" width="800" height="400">
<!--add columns ,the same as datagrid-->
<rlh:columns>
<mx:DataGridColumn dataField="username" headerText="User Name" />
<mx:DataGridColumn dataField="roles[0].name" headerText="Role Name" />
<mx:DataGridColumn dataField="roles[0].rescs[0].name" headerText="Resource Name" />
<mx:DataGridColumn dataField="organization.name" headerText="Org Name" />
</rlh:columns>
<!--provided request Type json request, AMF request-->
<rlh:requestType>
<rlh:LazyHttpService id="httpService" url="http://localhost:8080/lazyBaseSpringDaoDemo/userView/list"
result="httpService_resultHandler(event)"/>
</rlh:requestType>
</rlh:LazyDatagrid>
6)再介绍使用LazyRemoteObject,继承自RemoteObject:
<rlh:LazyRemoteObject endpoint="http://localhost:8080/lazyBaseBlazeDsDemo/messagebroker/amf"
id="reomoteObject"
destination="userService"
result="reomote_resultHandler(event)">
</rlh:LazyRemoteObject>
7)使用LazyDatagrid:
<rlh:LazyDatagrid id="lazyDatagrid"
y="50"
width="1000"
height="400">
<!--add columns ,the same as datagrid-->
<rlh:columns>
<mx:DataGridColumn dataField="username"
headerText="User Name"/>
<mx:DataGridColumn dataField="roles[0].name"
headerText="Role Name" itemRenderer="RoleItemRender"/>
<mx:DataGridColumn dataField="roles[0].rescs[0].name"
headerText="Resource Name (AMF can't support this method, but hibernate loaded)"/>
<mx:DataGridColumn dataField="organization.name"
headerText="Org Name"/>
</rlh:columns>
<!--provided request Type json request, AMF request-->
<rlh:requestType>
<rlh:LazyRemoteObject endpoint="http://localhost:8080/lazyBaseBlazeDsDemo/messagebroker/amf"
id="reomoteObject"
destination="userService"
result="reomote_resultHandler(event)">
</rlh:LazyRemoteObject>
</rlh:requestType>
</rlh:LazyDatagrid>
分享到:
相关推荐
标题"当设置lazy=true时,怎样使用ExtJS和Hibernate"所涉及的知识点主要集中在如何在ExtJS前端应用中与使用了懒加载特性的Hibernate后端进行交互。以下是对这个主题的详细解释: 1. **Hibernate懒加载**: - 懒...
在Flex中使用Gilead和Hibernate的懒加载,首先需要确保在Hibernate配置文件中对关联实体设置了懒加载属性。例如,如果有一个`User`类和一个`Address`类,`User`中包含一个`List<Address>`,那么在`User`的映射文件中...
`lazy="true"` 的使用场景通常是,当一个大型实体类中包含了很多关联的对象,而这些关联对象在大多数情况下并不需要立即加载。例如,一个用户对象可能关联了多个地址、订单等,如果在加载用户时一并加载所有关联数据...
在Hibernate中,当设置关联属性的`fetch`或`lazy`属性为`true`时,表示该关联属性采用懒加载方式。这意味着,在获取主对象时,Hibernate不会立即加载与其关联的子对象。例如,在用户(User)与帖子(Post)之间的多...
当我们将一个类或集合的`lazy`属性设置为`true`时,Hibernate会在需要时才去加载关联的对象,而不是在加载主对象时一并加载。这样可以避免不必要的数据库查询,提高性能。 **3. 错误和注意事项** 延迟加载可能导致...
`lazy="true"`会在集合被访问时加载,`lazy="false"`会在加载实体时同时加载集合,而`lazy="extra"`提供更智能的加载策略,推荐在实际应用中使用。 4. 单端关联(One-to-one, many-to-one)的延迟加载:`...
当我们声明一个集合为懒加载时,Hibernate会在映射文件(如.hbm.xml或使用注解)中配置`lazy="true"`。这样,Hibernate不会在初始化实体时加载整个集合,而是生成一个代理对象来代替真实的集合。当尝试访问这个代理...
**标题**: Hibernate懒加载(Lazy Loading) 在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会...
在Hibernate中,懒加载是一种优化策略,它推迟对关联对象的加载,直到真正需要使用这些对象时才进行加载,而不是在加载主对象时一次性加载所有关联对象。这样可以提高程序的性能,因为减少了数据库的交互次数。 ...
在描述中提到的问题是,当使用DWR调用Hibernate查询方法时,控制台显示了大量的SQL语句,导致性能下降。这通常是由Hibernate的延迟加载机制失效引起的。延迟加载意味着关联的对象或集合只在真正需要时才进行数据库...
当我们定义这些关系时,如果不希望在加载父对象时立即加载子对象,可以设置`fetch`属性为` FetchType.LAZY`。例如: ```java @Entity public class Parent { @Id @GeneratedValue(strategy = GenerationType....
当使用 `session.load()` 方法加载实体时,Hibernate 并不会立即查询数据库,而是返回一个代理对象。这个代理对象包含必要的信息,以便在真正需要访问实体属性时再进行数据库查询。 ##### 示例代码 ```java User ...
比如,当设置`lazy=true`时,只有在首次访问集合时才会触发加载,而在此之前不会执行任何数据库查询操作。同时,如果集合已经被初始化,则在后续的操作中,如添加、删除元素等,将不会导致额外的数据库操作。 #### ...
当我们在 Hibernate 中使用懒加载特性时,可能会遇到 LazyInitializationException 异常,这是因为 Hibernate 的 Session 生命周期太短,导致了懒加载失败。 为了解决这个问题,我们可以使用 Spring 提供的一个支持...
当使用Hibernate的`Session.load()`方法或在映射文件中设置了`lazy="true"`时,Hibernate并不会立即从数据库中获取关联对象的所有数据,而是创建一个代理对象。这个代理对象在需要访问其属性时才会执行实际的数据库...
要在Hibernate中启用实体对象的延迟加载,需要在映射文件中为相应的类添加`lazy="true"`属性,例如: ```xml <class name="com.neusoft.entity.User" table="user" lazy="true"> ... ``` **工作原理:** 当执行...
在Hibernate中,实体对象的延迟加载可以通过在映射文件中设置`lazy="true"`来启用。例如,对于名为`com.neusoft.entity.User`的实体类,映射配置如下: ```xml <Hibernate-mapping> <class name=...
1.4 当 Scope="singleton" 且 lazy-init="true" 时 1.5 当scope="prototype"时 1.6 当scope="prototype" 且 lazy-init="true" 时 1.7 小结 1.8 depends-on 1.8.0 实体类JavaBean 1.8.0.1 Student类 1.8.1 配置文件都...
- **Hibernate中的n+1查询问题**:当使用默认的立即检索策略时,Hibernate会在检索一个对象的同时检索其关联的所有对象。例如,在一个`Customer`与多个`Order`的关联关系中,如果数据库中有`n`个客户,则Hibernate将...
在Hibernate中,可以通过在实体的映射配置文件中设置`lazy="true"`来启用实体对象的延迟加载。 例如,对于一个User实体: ```xml <hibernate-mapping> <class name=...