在Google App Engine JPA实体中,java.lang.String
限制为500个字符,而com.google.appengine.api.datastore.Text
具有无限大小(需要注意的是entityManager.persist不会使用大于1 Mb的实体 - 我相信,但找不到关于它的参考)。
但是,如果我使用特定于Google的Text
类型,我会将我的应用与Google App Engine紧密结合。我想知道是否有更轻量级的方法来实现相同的结果,例如通过一些标准注释。
也许,用JSR-303注释注释String
。如果大小超过500,则会知道使用非索引的Text类型。示例:@Size(max = 3000)
很明显,我只是在做梦,但也许有一些标准方法可以避免App Engine特定的数据类型。有人知道吗?
更新:datanucleus-appengine中的found issue 10, Support @Lob JPA annotation Google App Engine的DataNucleus插件。
答案 0 :(得分:2)
我猜你可能已经想过这个了;但是无论如何我都会张贴这个,因为它增加了你问题中没有涉及的一点。我的解决方案是将其设为私有,然后对于我的对象定义,我不会返回Text对象。我承认这无法实现避免App Engine特定数据类型的目标;但它至少使得你不必在一个类之外重写代码,如果你决定从应用程序引擎移植你的应用程序,那么它依赖于Text对象。
因此,例如,假设text是blogPost变量......
public class BlogPost {
private Text post;
// ...
public String getPost() {
return post.getValue();
}
public void setPost(String val) {
this.post = new Text(val);
}
}
如果该代码感觉有点草率,可能会稍微(我不知道Text#getValue方法如何在内部工作)更有效地执行此操作...
public class BlogPost {
private Text post;
private String postValue;
// ...
public String getPost() {
return postValue;
}
public void setPost(String val) {
this.post = new Text(val);
this.postValue = val;
}
}