0

我是 app-engine Datastore 和 NoSQL 世界的新手。我正在开发一个简单的应用程序,用户可以在其中每天申报他/她的费用。每个用户(帐户)都有自己的申报费用。仪表板包含一个简单的 GWT 单元树,其中包含使用声明费用的所有年份,当他/她单击年份时,他会得到所有年份的月份,然后他点击月份并得到所有的日子月,最后点击一天,他得到了当天申报的所有费用。有点像

*2010 年

|_ jan
 |_1
 |_2
  |_Food 12d 
  |_Dress 200d 
  |_Fun 150d
  |_ ...

|_ feb 
|_ ...

*2011

|_ 一月

|_ 二月 |_...

我将每个用户(帐户)的费用实体保存在数据存储中,作为所有费用的父帐户。我的费用如下: public class Expense implements Serializable, Comparable {

 private String name;
  private double price;
  private Date date;

  public Expense(String name, double price, Date date) {

    this.name = name;
    this.price = price;
    this.date = date;
  }

  public Expense() {
  }

  public String getName() {
    return name;
  }

  public double getPrice() {
    return price;
  }

  public boolean isPriceValid() {
    return price > 0;
  }

  public void setName(String name) {
    this.name = name;
  }

  public void setPrice(double price) {
    this.price = price;
  }

  public Date getDate() {
    return date;
  }

  public void setDate(Date date) {
    this.date = date;
  }

  @Override
  public int compareTo(Expense expense) {
    if (name.equals(expense.getName())) {
      if (date.equals(expense.getDate())) {
        return new Double(price).compareTo(expense.getPrice());
      }
      return date.compareTo(expense.getDate());
    }
    return name.compareTo(expense.getName());
  }

我的问题是:如何查询数据存储中的费用并返回与指定帐户相关的所有不同年份并将它们放入列表或集合或其他任何我可以列出它们的地方?我是否需要获取所有费用实体并对其进行迭代并获得所有不同的年份。听起来不合理。欢迎任何建议,并提前致谢。

4

1 回答 1

1

与您的帖子相关的几条评论:

--> 我不会将财务金额存储为 Double。走这条路会导致你遇到舍入错误的大问题。有很多关于这个的帖子。我建议您将其存储为“DollarCent”并将其声明为整数。存储时只需将金额乘以 100,显示时除以 100。

--> 为什么你在 Datastore 中声明你的实体实现了 Serializable ?我会在没有可序列化的情况下存储。

--> 与按年显示数据的具体问题有关,阅读您的问题,我认为除了获取数据之外别无他法。我要做的是让 GAE 订购数据以避免事后订购。使用 Objectify,它只是 q.filter(...).order(-date).order(amount)。

希望这可以帮助 !

雨果

于 2012-06-29T06:30:10.737 回答