Собственные отношения. Потерянная ссылка - PullRequest
2 голосов
/ 10 апреля 2011

У меня есть объект Recipe, содержащий два изображения:

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class Recipe {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
    @Persistent
    private MyImage myImage; // full-size image
    @Persistent
    private MyImage thumb; // 224x230 thumbnail version of the above

    public Recipe(Key userKey, String title, Text content, MyImage myImage, MyImage thumb, Set<String> tags) {
        this.userKey = userKey;
        this.title = title;
        this.content = content;
        this.myImage = myImage;
        this.thumb = thumb;
        this.tags = tags;
    }
    public MyImage getMyImage() {
        return myImage;
    }
    public void setMyImage(MyImage myImage) {
        this.myImage = myImage;
    }
    public MyImage getThumb() {
        return thumb;
    }
    public void setThumb(MyImage thumb) {
        this.thumb = thumb;
    }
}

Когда я сохраняю это в хранилище данных, изображения сохраняются правильно. Однако проблема возникает, когда я пытаюсь ссылаться на изображения с помощью .getMyImage() и .getThumb(). Они оба указывают на один и тот же объект, хотя я могу видеть в Просмотрщик хранилища данных, что это два изображения разного размера. Если они хранятся в хранилище данных правильно, это означает, что есть проблема с тем, как я ссылаюсь на объект, я полагаю. Почему это?

Это объект, который я сохраняю, и, как вы можете видеть, myImage и thumb объекты разные (не показывает код для них, но поверьте мне, они).

Recipe recipe = new Recipe(user.getKey(), title, new Text(content), myImage, thumb, tagsAsStrings);

Есть идеи, почему я продолжаю ссылаться на один и тот же объект?

1 Ответ

2 голосов
/ 11 апреля 2011

Я понял, что в моих журналах показывалось "Это еще не поддерживается". Жаль, что эта функция не поддерживается, однако у меня был простой обходной путь.

Вместо:

@Persistent
private MyImage myImage; // full-size image
@Persistent
private MyImage thumb; // 224x230 thumbnail version of the above

Я положил:

private List<MyImage> images; // contains 2 elements
                              // index 0 full-size, 1 is thumbnail (224x230);
                              // since JDO app-engine doesn't support
                              // 2 attributes of the same type

Таким образом, в основном список из двух изображений вместо двух разных изображений. Это работает!

...