使用GAE Datastore和Objectify在ArrayList中存储和检索项目

时间:2015-05-06 22:35:21

标签: java jsp google-app-engine objectify

我正在尝试编写一个查询,允许我检索数据存储区Entity的ArrayList,以便我可以在JSP上显示它。我能够成功地将实体添加到数据存储区,我可以在开发控制台中看到ArrayList也在那里。

我是否需要嵌入ArrayList来实现这一目标?嵌入后,将检索列表的查询是什么?

{I}添加到数据存储区的SharedCorpse类。

@Entity
public class SharedCorpse extends Corpse {

    @Id Long id;
    @Index long corpseID;


    public SharedCorpse(ArrayList<CorpseLyric> corpseLyrics, long corpseID) {
        super(corpseLyrics);
        this.corpseID = corpseID;
    }

}

CorpseSharedCorpse扩展(如果有帮助)

public class Corpse implements Serializable {

    @Index private ArrayList<CorpseLyric> corpseLyrics;

    public Corpse() {
        corpseLyrics = new ArrayList<CorpseLyric>();
    }

    public Corpse(ArrayList<CorpseLyric> corpseLyrics) {
        this.corpseLyrics = corpseLyrics;
    }

    public void addLyricSnippet(CorpseLyric corpseLyric) {
        corpseLyrics.add(corpseLyric);
    }

    public void removeLyricSnippet(CorpseLyric corpseLyric) {
        corpseLyrics.remove(corpseLyric);
    }

    public ArrayList<CorpseLyric> getCorpseLyrics() {
        return corpseLyrics;
    }
}

我当前的查询:

SharedCorpse sharedCorpse = ObjectifyService.ofy().load().type(SharedCorpse.class).filter("corpseID",sharedID).first().now();

我用来显示ArrayList中项目的JSP代码:

<table>
    <c:forEach var="corpseLyric" items="${sharedCorpse.corpseLyrics}">
        <tr>
            <td>${corpseLyric.snippet}</td>
        </tr>
    </c:forEach>
</table>

1 个答案:

答案 0 :(得分:0)

你不需要做任何特别的事情。如果你的尸体有一个List类型的字段,它将被整个存储和检索。你不需要(也可能不应该)@Index the field。

此外,您可能不希望维护单独的idcorpseID字段。只需使用id并按键加载实体(或使用type()。id()快捷方式)。

您可能需要阅读此内容:https://github.com/objectify/objectify/wiki/Entities