继续前面一篇Blog的问题,那张JavaEye上的帖已经很值得看一下了,上面的讨论能引发很多思考(http://www.javaeye.com/topic/421104)。
GAE上面的String类型,只能支持500字符,所以需要使用它提供的com.google.appengine.api.datastore.Text作为数据类型。一位坛友认为是Play!框架的原因,不能处理该类型,我则觉得这不大可能:
哦?没有注意这个问题,呵呵~我也是刚接触这两个东西,那个Test应该是GAE提供的包吧?play可以引入别的数据类型的,理论上,如果View层没法迭代出来,最多在
postVo.setContent(postItem.content.toString());//假设有类似的方法
的时候转一下就好了,这些都不是问题,任何一个框架理论上都不会遇到适别数据类型的问题的,也就是说Play!不会说不能使用Test类型的,他大不了当是自定义的一个类处理。
分歧就这样出现了,吃了个饭回到电脑前,看了下他回了个帖,问题还没解决,于是我就循着我的想法去找问题,大概用了一个小时,解决方法找到了:
呵呵~恕我直说吧,你这个解决方法,其实不如使用传统的DTO模式,很明显GAE的存储层没法“到处调用”,那就应该把它隔离出来,原来J2EE的分层就是这个原因~
另外500字符问题已经解决(有点累,找了不少资料),Text不是Play!不能识别,原因如我前面所说~~
可以把GAE的appengine-api-1.0-sdk-1.2.1.jar拷过来,里面有com.google.appengine.api.datastore.Text这个类,在Post里面把content的类型设为他就好。。。
你会发现GAE这个字段没被存起来,这时候要坚定信念,因为前面已经分析过原因。去找GAE的问题,Google不到,只有JDO的,那就去Google Group去找,里面全是GAE的高手,包括开发者,搜一下就会发现有人遇到你的问题了。。。
在这个字段前面加上@Enumerated就可以解决。。。
后面的事情如同我前面说的,大不了复制为VO的时候转一下就好(这时候,你的解决方法就不行了,分层还是有好处的:)):