对于一个实体类,没有包含其他自定义类,在Flex前段对应,只需如下:
package actionScript.entity { [Bindable] [RemoteClass(alias="org.cloud.entity.User")] public class User { public function User() { } public var id:int; public var username:String; public var password:String; public var name:String; public var userType:String; }
org.cloud.entity.User是java端User类的路径。这样定义后,使用RemoteObject获取User类后可以直接转换为actionScript写的User。
但是如果User中含有其他自定义类,如Department,用户所属部门。java端使用Hibernate,反射出的实体类就会含有外键所在类。定义如下,可防止Department为空:
package actionScript.entity { [Bindable] [RemoteClass(alias="org.cloud.entity.User")] public class User { public function User() { } public var id:int; public var username:String; public var password:String; public var name:String; public var userType:String; public var department:Object; }
在flex端访问user的department属性,方式为:user.department.departmentName类似的即可。
但这样,当往后端存或更新用户时就会出现错误,在java端department属性无法被解析为Department类型。所以为了从根本上避免此麻烦,建议:在java端重新定义一个类来保存需要的实体信息,如UserRecord,它有User的基本信息和departId、departName等部门的信息。前后端通信使用UserRecord,java端的业务逻辑类接受UserRecord,然后转换成User来进行存取。