`
碧海山城
  • 浏览: 192602 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

BlazeDS结合Hibernate--对使用PO还是VO的思考

阅读更多
Flex的学习也有一段时间了,AMF确实非常强大,最近在使用的就是BlazeDS,持久层使用的是Hibernate。下面就业务层直接返回PO还是返回VO讨论一下。

返回PO的代码量比返回VO的代码量要少很多的,可以避免一个繁琐的重复的代码,但是我在把PO作为返回值与Flex结合的过程中遇到了一些问题,特别是对于有3到4张表深度的关联的时候就更加觉得不方便(比如学校—学院--班级---学生,现在要列出某个学校的学生),下面拿一个简单的2张表关联的时候作为例子。

假设现在有两张表,TUser和TRole,分别是人员表和角色表,多对一关系

public class TUser implements java.io.Serializable {
	private Integer userId;
	private TRole 	TRole;
	private String userName;
	private String userPass;
	private String userTname;
}

public class TRole implements java.io.Serializable {

	private Integer roleId;
	private String roleName;
	private Set TUsers = new HashSet(0);

}


获得人员的hql为
 from  TUser  as ta join fetch ta.TRole
直接将结果作为List<TUser>返回,与这两个entity对应的AS文件是
public class TUser
{
		
		public var userId:int;
		public var userName:String;	
		public var userPass:String;
		public var userTname:String;
		public var TRole:Object;
		
		public function TUser (){
		}
}

public class Roles
{
		public var roleId:int;
		public var roleName:String;
		public var TUsers:Array;
		
		public function Roles()
		{
		}
}


下面将用户名和真实姓名显示在DataGrid中,主要代码如下(中间处理返回值还是要做一定的转换的,代码就不贴出来了):

<mx:DataGrid id="admDataGrid" dataProvider="{acPageData}" 
	editable="true">
		<mx:columns>
<mx:DataGridColumn headerText="用户名" dataField=" userName "/>
<mx:DataGridColumn headerText="真实姓名" dataField=" userTname "/>
		</mx:columns>
</mx:DataGrid>


见图:

现在要显示出管理员名称,使用
<mx:DataGridColumn headerText="真实姓名" dataField=" TRole. roleName "/>

是行不通的,解决办法是使用DataGridColumn的labelFunction就TRole的Object转换位真正的Role类型,并且返回他的roleName(不过大家可以想象一下我前面提到的学校—学院—班级—学生的例子,如果要列出学生又要分别列出班级,学院,学校的话,就比较麻烦了),

代码:

internal function parsePOAdmin(item:Object,column:DataGridColumn):String{

	var roles:Roles=Roles(item.TRole);
	return roles.roleName;
}

如下图:



这样貌似显示的问题解决了,但是这一列却已经无法编辑了,如果将editable设置位true,再对管理员这一列进行编辑,会发现出现一下错误:
强制转换类型失败:无法将 "管理员" 转换为 vo.Roles,

究其原因,应该是在editor以后会调用labelFunction里面的对应方法,然后这个方法在开始的时候值是一个Object而不是String,可以进行转换,现在却已经不行了。这个问题一直无法得到解决。或许我们可以搞个自定义组件,里面有roleId和roleName,显示出roleName,在编辑的时候根据roleId找到TRole再改变roleName,然后…….麻烦


如果上面的我们使用VO,那么是一点问题也没有的,我们可以正常的显示,编辑,而且甚至我们可以在VO里面加入序号用来显示DataGrid的序号(就是grid前面的序号,好像DtadGrid里面没有这个功能,如果要在AS里实现又是比较麻烦的,Ext确实强大啊,这个功能只要一句代码就搞定了)。

当然使用VO后台代码就会多一些无谓的繁琐代码了,可是PO的问题始终解决不了,那么,你会怎么样选择呢?


(当然,这些问题也有可能有解决办法,只是我没发现,希望知道的可以说一下,呵呵)
  • 大小: 4.4 KB
  • 大小: 4.8 KB
分享到:
评论
5 楼 碧海山城 2009-03-16  
我记得论坛里有篇帖子里说,有个什么框架可以解决hibernate的延迟加载问题,去搜搜。

目前我的应用都是在返回之前全部准备好了数据,对于不需要的数据setStudent(null);这样他就不会发生延迟加载了,其实我的项目中本身就是用这种方式,特别是json转换的时候,所以没有延迟加载的问题
4 楼 找不到服务器 2009-03-16  
blazeDS如何解决延迟加载?
3 楼 碧海山城 2008-11-09  
呵呵,其实你看看我的代码就知道我的和你没什么区别了,我的意思是你返回的对象有关联的时候,比如你的Produment还有另外的一个对象,
public Produment(String name,int age,double height,TRole trole){   
        this.name = name;   
        this.age = age;   
        this.height = height; 
        this.trole=trole;
    }   


这时候你要显示出trole里面的name属性,应该要使用labelFunction,可是这样编辑这一列会出问题的,你可以试试
2 楼 碧海山城 2008-11-08  
恩,好的,谢谢
1 楼 houwei 2008-11-08  
给你一些提示, 自己去钻研:
1 你的 Actionscript VO。 TRole 需定义成 Role Object 不是 Object
2.学习使用RemoteClass

相关推荐

    blazeds-bin-3.3.0.22497.zip

    这个版本“blazeds-bin-3.3.0.22497.zip”是BlazeDS的一个特定发行版,包含了运行和部署BlazeDS所需的所有组件。 在解压后的文件中,我们看到两个关键文件: 1. **blazeds.war**:这是一个Web应用归档文件(Web ...

    blazeds-turnkey-4.0.0.14931

    BlazeDS是Adobe公司开发的一款开源项目,它主要提供了一个基于服务器的解决方案,用于实现Java应用程序与...在实际应用中,BlazeDS通常与其他技术,如Spring框架或Hibernate ORM结合,构建出更加健壮的企业级应用系统。

    blazeds-bin-4.0.1.17657.zip

    这个“blazeds-bin-4.0.1.17657.zip”压缩包包含了BlazDS的二进制版本,这是一个开放源代码的服务器端技术,由Adobe开发并广泛应用于构建富互联网应用程序(RIA)。它的主要目标是提供数据集成和交互能力,使得基于...

    blazeds-turnkey-4.0.0.14931第四卷

    blazeds-turnkey-4.0.0.14931第四卷(共四卷) 含tomcat

    blazeds-core-3.2.0.3978.jar

    blazeds-core-3.2.0.3978.jar blazeds-core-3.2.0.3978.jar

    blazeds-bin-4.0.0.15974.zip

    Blazeds-bin-4.0.0.15974.zip是一个包含Adobe BlazeDS库的压缩包,专为Flex开发者设计,旨在提供强大的数据集成和远程服务访问功能。BlazeDS是Adobe官方推出的一个开源项目,它允许Flex客户端与Java后端服务器之间...

    blazeds-turnkey-4.0.0.14931.zip

    5. **数据服务**:理解如何使用Blazeds的数据服务,如Real-time Shared Objects和Remote Objects,以及如何结合使用这些服务来优化数据传输。 6. **调试与性能优化**:掌握Blazeds应用的调试技巧,以及如何进行性能...

    blazeds-turnkey-4.0

    在提供的`blazeds-turnkey-4.0.0.14931.zip`压缩包中,我们可以找到以下关键资源: 1. `blazeds-turnkey-readme.htm`:这是项目的基本使用指南,详细介绍了如何配置和运行BlazeDS Turnkey,包括系统需求、安装步骤...

    blazeds一系列的jar包-4.0

    包含blazeds-common-4.0.0.14931.jar、blazeds-core-4.0.0.14931.jar、blazeds-proxy-4.0.0.14931.jar、blazeds-remoting-4.0.0.14931.jar

    blazeds 3-0-0-544

    Blazeds,全称为Adobe BlazeDS,是一款由Adobe公司开发的开源服务器端技术,主要用于实现Flex...在实际项目中,结合使用BlazeDS、Flex或Flex4,以及Spring等企业级框架,可以构建出高性能、用户体验良好的Web应用。

    blazeds-turnkey-4.0.0.14931.zip分卷二

    blazeds-turnkey-4.0.0.14931.zip分卷二

    spring-blazeds-reference.rar_blazeds-bin-4._flex

    Spring还包含了一个强大的数据访问层,支持JDBC、Hibernate、MyBatis等多种ORM工具,以及Web MVC框架,方便前后端的交互。 2. Adobe Flex概述 Adobe Flex是一种基于MXML和ActionScript的开放源代码框架,用于构建...

    blazeds-turnkey-4.0.0.14931第一卷

    blazeds-turnkey-4.0.0.14931含tomcat 第一卷(共四卷)

    blazeds-turnkey-4.0.0.14931第二卷

    blazeds-turnkey-4.0.0.14931含tomcat 第二卷(共四卷)

    blazeds-turnkey-4.0.0.14931第三卷

    blazeds-turnkey-4.0.0.14931第三卷(共四卷) 含tomcat

    flex-src.zip_blazeds_blazeds src download_blazeds-bin-4._flex_tr

    综上所述,此压缩包提供了丰富的BlazeDS学习资源,包括源码、示例应用和配置文件,对于想要深入了解和使用BlazeDS的Flex开发者来说,这是一个宝贵的资料库。通过研究这些内容,开发者可以提升自己的技能,实现更高效...

    Blazeds+ds-consele+samples

    在Flex应用开发中,BlazeDS使得开发者能够使用Flex的组件和编程模型构建富互联网应用(Rich Internet Applications, RIA),同时利用Java的强大后端处理能力。例如,通过 BlazeDS,你可以轻松地将Java对象透明地暴露...

    blazeds-turnkey-4.0.14931

    8. **示例应用程序**:压缩包中的示例应用程序展示了如何使用Blazeds-Turnkey的各项功能,包括基本的Remoting、数据服务以及消息传递。这些例子对于初学者理解和实践BlazeDS技术非常有帮助。 9. **开发工具集成**:...

    blazeds-bin-3.3.0.20776

    BlazDS的全称是“Blaze Data Services”,在标题中提到的“blazeds-bin-3.3.0.20776”是BlazDS的一个特定版本号,这通常意味着包含了该版本的所有组件和库。 1. **Flex与Java通信**: Flex是一种用于构建富互联网...

Global site tag (gtag.js) - Google Analytics