com.google.appengine.api.datastore.Text的替代品?

时间:2011-12-10 17:05:43

标签: java google-app-engine jpa

在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插件

1 个答案:

答案 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;
  }
}