Java 具有Objectify数据结构的应用程序引擎

Java 具有Objectify数据结构的应用程序引擎,java,google-app-engine,google-cloud-datastore,objectify,Java,Google App Engine,Google Cloud Datastore,Objectify,真的很喜欢objectify,尽管我仍在努力寻找在我的应用程序中构建数据的最佳方式。我将很快推出一个新的应用程序,我不想被一个可能无法正常运行或运行非常缓慢的结构所束缚 该应用程序将位于HRD上,并具有大量实体类型。为了便于说明,我将创建一些示例实体。假设该应用程序适用于快餐店。每个连锁店都是一个实体(例如麦当劳、温迪等)。每个特定的特许经营权或地点也将是一个实体。员工、订单、菜单、时间表等也将是实体 我想最大的问题是如何建立这些实体之间的关系?我通过在每个实体中将数据存储ID存储为long来存

真的很喜欢objectify,尽管我仍在努力寻找在我的应用程序中构建数据的最佳方式。我将很快推出一个新的应用程序,我不想被一个可能无法正常运行或运行非常缓慢的结构所束缚

该应用程序将位于HRD上,并具有大量实体类型。为了便于说明,我将创建一些示例实体。假设该应用程序适用于快餐店。每个连锁店都是一个实体(例如麦当劳、温迪等)。每个特定的特许经营权或地点也将是一个实体。员工、订单、菜单、时间表等也将是实体

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

使用此结构,我可以通过以下语句查询特定餐厅的所有订单:

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

这是标准做法。走吧

Objectify很好-我们已经使用了大约6个月了,我们对此非常满意。

键是类型安全的,而
长的
不是。文档中不鼓励使用Long

参考:


我鼓励你通读整页,这是值得的。我现在有了一个类型安全结构,它在任何地方都使用
Ref

很高兴听到我在正确的道路上。有了所有关于objectify和datastore的文档,这种方法似乎变得非常简单。我没有使用@Parent、@embedded或任何您可以执行的更复杂的操作。谢谢你的意见!我想知道使用长ID与存储密钥相比是否有优势/劣势?我自己也在使用密钥,但没有任何理由支持其中一个。@Parent的唯一一点是让你的结果高度一致——如果你不需要高度一致的结果,那么使用它就没有意义了。
@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
   }