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