У меня следующая проблема:
Java-объект содержит два массива основных типов хранилищ данных (com.google.appengine.api.datastore.Text и java.util.Date), а также int (длясохранение текущей заполненной позиции в массивах) и некоторые другие поля.
Я считаю, что в документации говорится, что массивы основных типов данных должны быть в порядке (см. http://code.google.com/appengine/docs/java/datastore/jdo/dataclasses.html, в разделе "Аннотации классов и полей").
Объект обновляется с использованиемметод с именем "updateAnswer".Когда вызывается этот метод, объект действительно обновляется (int увеличивается и сохраняется правильно), но массивы никогда не хранят ничего, кроме нулей.
Я был бы очень признателен, если бы кто-то мог указать, в чем заключается моя ошибка.
Вот объект (и его родитель для полноты):
@PersistenceCapable
public class TextualAnswer extends Answer {
@Persistent
private Text textAnswer;
@Persistent
private Date date;
@Persistent
private int pos;
@Persistent
private Text texts[];
@Persistent
private Date dates[];
public TextualAnswer(Key question, Key user, Date date) {
super(question, user, 0);
this.textAnswer = null;
this.date = date;
pos = 0;
texts = new Text[20];
dates = new Date[20];
}
public String getTextAnswer() {
return (textAnswer != null ? textAnswer.getValue() : null);
}
public Date getDate() {
return date;
}
public void updateAnswer(String textAnswer, Date date) {
if (texts.length == pos) { // expand?
Text ttemp[] = texts;
texts = new Text[pos * 2];
System.arraycopy(ttemp, 0, texts, 0, pos);
Date dtemp[] = dates;
dates = new Date[pos * 2];
System.arraycopy(dtemp, 0, dates, 0, pos);
}
texts[pos] = this.textAnswer;
dates[pos] = this.date;
pos++;
this.textAnswer = (textAnswer != null ? new Text(textAnswer) : null);
this.date = date;
}
}
Родитель:
@PersistenceCapable
@Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE)
public abstract class Answer {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private Key question;
@Persistent
private Key user;
@Persistent
private double score;
@Persistent
private boolean last;
@Persistent
private Text comment;
public Answer(Key question, Key user, double score) {
this.question = question;
this.user = user;
this.score = score;
last = false;
comment = null;
}
public Key getKey() {
return key;
}
public Key getQuestion() {
return question;
}
public Key getUser() {
return user;
}
public double getScore() {
return score;
}
public boolean isLast() {
return last;
}
public String getComment() {
return comment != null ? comment.getValue() : null;
}
public void setScore(double score) {
this.score = score;
}
public void setLast(boolean last) {
this.last = last;
}
public void setComment(String comment) {
this.comment = comment != null ? new Text(comment) : null;
}
}
Заключительная заметка.Я понимаю, что вместо этого могу использовать списки и т. Д., И если я не пойму это, это действительно мой план резервного копирования.Но я хотел бы понять, почему это не работает, поэтому я хотел бы, чтобы любые предложения по переключению на объекты вместо массивов сопровождались объяснением того, почему массивы не работают;) Спасибо.
Ex animo, - Александр Инглинг