Альтернативы com.google.appengine.api.datastore.Text? - PullRequest
1 голос
/ 10 декабря 2011

В JPA-объекте Google App Engine значение java.lang.String ограничено 500 символами, а com.google.appengine.api.datastore.Text имеет неограниченный размер (с оговоркой, которую не допускает entityManager.persistне работает с объектами размером более 1 Мб - Я полагаю, но не могу найти ссылку на это ).

Однако, если я использую специфичный для Google тип Text, ябудет тесно связывать мое приложение с Google App Engine.Мне было интересно, есть ли более легкий способ достижения того же результата, например, с помощью некоторой стандартной аннотации.

Возможно, аннотируя String с помощью аннотации JSR-303.Если размер превышает 500, он будет знать, что нужно использовать неиндексированный текстовый тип.Пример: @Size(max = 3000)

Я просто мечтаю, но, возможно, есть какой-то стандартный способ избежать специфических типов данных App Engine.Кто-нибудь знает?

ОБНОВЛЕНИЕ : найдена проблема 10, Поддержка аннотации @Lob JPA в datanucleus-appengine Плагин DataNucleus для Google App Engine .

1 Ответ

2 голосов
/ 10 декабря 2011

Полагаю, вы уже подумали об этом; но я все равно публикую это, поскольку это добавляет пункт, который не рассматривается в вашем вопросе. Мое решение здесь состояло в том, чтобы сделать его закрытым, а затем для определения моего объекта я никогда не возвращаю объект Text. Я признаю, что это не достигает вашей цели - избегать определенного типа данных App Engine; но это по крайней мере делает так, что вам не нужно переписывать код вне одного класса, который опирается на объект 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...