我在Objectify中使用appengine来访问我的数据源.我使用Spring作为业务层.为了玩数据,我使用了objectify-appengine-spring工厂.
我想使用基于注释的本地事务.你知道我可以直接插入一个Spring bean的现有实现吗?
我真的想避免使用线程本地实现我自己的事务提供程序的痛苦.
google-app-engine spring transactions objectify google-cloud-datastore
您有两个相关的实体:客户和汽车.每个客户可以拥有多辆汽车
这是实体的摘要视图:
public class Customer
{
//Inner classes for partial loads
public static class NoCars{}
@Id protected String id;
private String fullName;
@Load(unless=NoCars.class) private List<Ref<Car>> cars;
}
public class Car
{
@Id private Long id;
private String makeAndModel;
private String plateNumber;
}
Run Code Online (Sandbox Code Playgroud)
这是一种从数据存储区和他拥有的所有汽车中检索客户的方法:
public Customer getCustomer(@Named("id") String customerId)
{
Customer customer = ofy().load().type(Customer.class).id(customerId).now();
if (customer==null)
throw new NotFoundException("customer not found");
else
return customer;
}
Run Code Online (Sandbox Code Playgroud)
endpoints.sh无法实现这一点,因为不支持List <Ref<Car>>返回类型Customer中包含的类型,但我发现这个有趣的解决方法:
我创建了CustomerPOJO类
public class CustomerPOJO …Run Code Online (Sandbox Code Playgroud) 我在Cloud Datastore中存储了大约一百个对象Kind= Animal.我想Animal通过低级API或Objectify从数据库中获取所有内容.
我正在使用带有Objectify的GAE/Java,并且我正在尝试找到检查数据存储区中是否存在给定对象的最快方法.我在做什么,现在是.get(key)有@Cached,但无论哪种方式,仍然检索整个对象,这是不必要的.
关于如何使用索引执行此操作的任何想法只会命中?我还想到了一个只有密钥的查询,但我看到(在系统状态仪表板上)延迟远远超过了get.
我找不到任何关于在Google App Engine上使用Objectify在对象之间建立多对多关系的适当方法的文档.
任何人都可以解释如何做到这一点?我需要为此创建一个新的"加入"类吗?效率如何?
我想向我的用户展示一些统计信息,例如Google App Engine上的匹配/秒.我开始自己动手了:
每分钟:
然后我意识到这是非平凡的,必须有一个库来做,但是我找不到一个适合我的库.我简要介绍了rrd4j和JRobin,但我不确定它们是否可以在Google App Engine上使用,而不需要进行大量的重写.有没有人有更多的想法?
目前,我有一些抽象的模型类,它们具有其他具体模型的共同行为.例如,抽象的SearchableModel.class可能会被其他具体模型继承.
使用Objectify时,我想注释SearchableModel类,因为它需要持久化它自己的字段.但是,我对进行任何类型的多态查询都不感兴趣,我不想在数据存储区中使用任何类型的"SearchableModel"实体,只需要继承自SearchableModel的具体类.我应该如何处理@ Entity/@ EntitySubClass注释?
如果我使用@Entity注释抽象类和具体类,并且持久化/加载具体类的实例,它是否会按预期工作?
我知道我可以自己测试一下,但是,我还没有设置客观化.我仍在试图弄清楚它如何与我当前的模型一起使用.
关于如何组织这种依赖性的任何其他建议也受到赞赏.
谢谢.
我正在尝试使用带有Objectify和Google App Engine的光标来返回数据和光标的子集,这样我就可以在用户准备好时检索更多数据.我在这里找到了一个看起来完全像我需要的例子,但我不知道如何返回最终列表和光标.这是我的代码:
@ApiMethod(name = "listIconThemeCursor") //https://code.google.com/p/objectify-appengine/wiki/Queries#Cursors
public CollectionResponse<IconTheme> listIconThemeCursor(@Named("cursor") String cursorStr) {
Query<IconTheme> query = ofy().load().type(IconTheme.class).limit(10);
if (cursorStr != null ) {
query.startAt(Cursor.fromWebSafeString(cursorStr));
}
List<IconTheme> result = new ArrayList<IconTheme>();
int count = 0;
QueryResultIterator<IconTheme> iterator = query.iterator();
while (iterator.hasNext()) {
IconTheme theme = iterator.next();
result.add(theme);
count++;
}
Cursor cursor = iterator.getCursor();
String encodeCursor = cursor.toWebSafeString();
return serial(tClass, result, encodeCursor);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是从先前的端点修改的,在该端点中我返回了所有数据的CollectionResponse.我的数据集足够大,不再实用.基本上,我不知道用户的'serial(tClass,result,encodeCursor)函数是什么让它返回给用户.
这里有另一个例子,但似乎也没有回答我的问题.
我正在使用 Google App Engine 创建一个由多个Google Modules组成的项目。如何设置我的项目(使用 Maven),以便我可以跨模块共享源代码,例如 Objectify 对象模型定义、共享实用程序代码和单元测试代码?
我希望答案很简单,并且我可以按照以下答案中的建议使用 Maven:
但是,我担心 Google App Engine 模块可能有一些特殊之处,使它们与 Maven 模块不同。然后也许上面的方法行不通。
作为我担心的一个例子,请注意Google 说“虽然 Java EE 支持 WAR 文件,但模块配置仅使用解压的 WAR 目录。” 然而,上面给出的一些解决方案建议将共享代码打包到 JAR 文件中。我意识到 WAR 和 JAR 是不同的,但我担心我会浪费时间尝试做一些不能工作的事情。
关于如何在 Google App Engine 模块之间共享代码的任何建议?
我有如下类 City 的模型:
@Entity
public class City {
@Id
Long id;
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Run Code Online (Sandbox Code Playgroud)
我有另一个模型类 Person 下面给出:
@Entity
public class Person {
@Id
Long id;
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ApiResourceProperty(ignored = AnnotationBoolean.TRUE)
Key<City> city;
}
Run Code Online (Sandbox Code Playgroud)
之后,我使用 android studio 为这两个类生成端点并部署它。
这是生成的端点的代码:
个人端点
@Api(
name = "personApi",
version = "v1",
resource = "person", …Run Code Online (Sandbox Code Playgroud) google-app-engine android objectify google-cloud-endpoints google-cloud-datastore