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);}
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(){}}
<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 "/>
internal function parsePOAdmin(item:Object,column:DataGridColumn):String{var roles:Roles=Roles(item.TRole);return roles.roleName;}如下图: