具有Objectify数据结构的App引擎

时间:2011-10-28 23:15:10

标签: java google-app-engine google-cloud-datastore objectify

非常喜欢客体化,尽管仍在努力解决在我的应用中构建数据的最佳方式。我将很快推出一款新应用程序,并且不希望陷入可能无法正常运行的结构,或者执行速度非常慢。

该应用程序将在HRD上,并将具有大量实体类型。为了便于说明,我将组成一些示例实体。假设该应用程序适用于快餐店。每个链都是一个实体(例如McDonalds,Wendy's等)。每个特定的特许经营或地点也将是一个实体。员工,订单,菜单,时间表等也将是实体。

我想最大的问题是如何设置这些实体之间的关系?我通过在每个实体中将数据存储区ID存储为long来存储关系。例如,每个员工实体都有一个long值,该值是他们所在位置的数据存储区ID,以及它们所属的链。

通过这种结构,我可以查询来自特定餐馆的所有订单,其语句如下:

  Long restaurantId =restaurant.getId();
  Query<Order> q=ofy.query(Order.class).filter("location", resturantId);

只是好奇以这种方式使用数据存储区/客观化是否存在任何问题。任何输入都会很棒!我一直在使用类似的小规模,似乎工作正常。理想情况下,我想要最有效的结构,我意识到这可能需要一些测试。但是,一旦部署了应用程序,可能很难改变......

@Entity
public class Chain {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String name;
  private String type;

  //getters & setters, etc
  }

@Entity
public class Location {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private Long chain;  //which resturant chain the location belongs to (mcdonalds, wendy's,     etc)

  private String address;
  private String owner;
  private String phoneNumber;

  //getters & setters, etc
  }

@Entity
public class Employee {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private Long location;  //which location the employee works for
  private Long chain;  //which resturant chain the location belongs to (mcdonalds, wendy's,     etc)

  private String name;
  private String position;

  //getters & setters, etc
  }

@Entity
public class Order {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private Long chain;  //which resturant chain the location belongs to (mcdonalds, wendy's,     etc)
  private Long location;
  private Long employee; //employee that took order

  private Order order;
  private String time;

   //getters & setters, etc
   }

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

Key<Object>类型安全,Long不是。在文档中不鼓励使用Long。

参考:https://github.com/objectify/objectify/wiki/Entities#relationships

我鼓励您仔细阅读整个页面,值得花时间。我现在到处都使用Ref<Object>的类型安全结构。