我有一个名为lastName的实体,其值为"Benjamin".如果用户放"Ben"或"jam"或"Benja",是否有一种客观化的方式.我仍然可以使用query.filter()找到这个实体.我必须使用查询,因为我检查有其他搜索条件.
我在"Obgaektify"中看到一些名为"start with"运算符的东西.但它没有用.任何建议,将不胜感激.谢谢
我的RPC服务中有这个方法:
@Override
public Entrata[] getEntrate(int from, int to) {
List<Entrata> data = entrateDao.list();
return data.toArray(new Entrata[0]);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我没有使用这两个参数,在SQL世界中,我将使用LIMIT和OFFSET.
现在还不完全清楚我现在要做什么,我开始阅读这篇文章:http: //code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Cursors
我想我必须做一个query.startCursor()
然后迭代"TO"次,页面大小.
行?你可以帮我一些片段吗?:)
我正在使用GAE 1.8.1而且我使用新的分散ID系统遇到了Objectify的问题.至少我认为这是Objectify,我不确定(使用Objectify 4 RC1).我收到了..
Caused by: java.lang.IllegalArgumentException: id cannot be zero
at com.google.appengine.api.datastore.KeyFactory.createKey(KeyFactory.java:52)
at com.google.appengine.api.datastore.KeyFactory.createKey(KeyFactory.java:47)
at com.googlecode.objectify.Key.<init>(Key.java:91)
at com.googlecode.objectify.Key.create(Key.java:39)
at com.googlecode.objectify.impl.cmd.LoadTypeImpl.id(LoadTypeImpl.java:77)
Run Code Online (Sandbox Code Playgroud)
记录正确地放入数据存储区,因为它们具有ID,但这是在取出数据时.
所以我必须暂时回到原来的状态.它在此声明您可以通过修改appengine-web.xml中的auto_id_policy来指定遗留ID生成.我已经尝试将此添加到文件中:
<auto-id-policy>legacy</auto-id-policy>
Run Code Online (Sandbox Code Playgroud)
但它不起作用,或者至少它可能有效,如果它验证的XSD支持此标记.因此,您无法部署应用程序.
在AppEngine上使用Objectify计算查询返回的对象数量(实际加载它们)的最佳(即最有效)方法是什么?我猜最好的方法是获取所有密钥并计算结果:
public int getEntityCount(Long v) {
Objectify ofy = ObjectifyService.begin();
Iterable<Key<MyEntity>> list = ofy.query(MyEntity.class)
.filter("field", v).fetchKeys();
int n = 0;
for (Key<MyEntity> e : list)
n++;
return n;
}
Run Code Online (Sandbox Code Playgroud)
似乎没有任何专门的方法来做到这一点.有任何想法吗?
我有以下实体(不相关的字段/方法被删除).
public class HitsStatsTotalDO
{
@Id
transient private Long targetId;
public Key<HitsStatsTotalDO> createKey()
{
return new Key<HitsStatsTotalDO>(HitsStatsTotalDO.class, targetId);
}
}
Run Code Online (Sandbox Code Playgroud)
所以...我正在尝试批量获取10个对象,我使用它来构造键HitsStatsTotalDO.createKey().我试图在事务中获取它们,如下所示:
final List<Key<HitsStatsTotalDO>> keys = ....
// This is being called in transaction..
Map<Key<HitsStatsTotalDO>, HitsStatsTotalDO> result = DAOBase.ofy().get(keys);
Run Code Online (Sandbox Code Playgroud)
抛出以下异常:
java.lang.IllegalArgumentException: operating on too many entity groups in a single transaction.
你能详细说明有多少太多以及如何解决它?我在文档中找不到确切的数字.
谢谢!
google-app-engine transactions objectify google-cloud-datastore
我需要在一个内部进行查询Transaction,但是我不知道实体@Id,我所拥有的是一个字段的值,比如用户名而不是ID,
换句话说,我无法创建一个Key查询.如何进行查询以获取实体内部Transaction?
我正在尝试保存一个对象并验证它是否立即保存,并且它似乎没有工作.
这是我的目标
import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;
@Entity
public class PlayerGroup {
@Id public String n;//sharks
public ArrayList<String> m;//members [39393,23932932,3223]
}
Run Code Online (Sandbox Code Playgroud)
这是保存然后尝试加载的代码.
playerGroup = new PlayerGroup();
playerGroup.n = reqPlayerGroup.n;
playerGroup.m = reqPlayerGroup.m;
ofy().save().entity(playerGroup).now();
response.i = playerGroup;
PlayerGroup newOne = ofy().load().type(PlayerGroup.class).id(reqPlayerGroup.n).get();
Run Code Online (Sandbox Code Playgroud)
但是"newOne"对象为null.即使我完成了保存它.我究竟做错了什么?
- 更新 - 如果我稍后尝试(比如几分钟之后),我有时会看到对象,但保存后却没有.这与高复制存储有关吗?
我和Objectify有一段关系,我希望获得关系的一面.
我试图用这个查询来解决它:
Query query = ofy().load().type(Person.class);
query.filter("position", ceo);
return query.list();
Run Code Online (Sandbox Code Playgroud)
返回CEO名单.位置是Ref <Position>.
我试过了:
query.filter("position", Ref.create(ceo));
query.filter("position", Key.create(ceo));
query.filter("position", ceo.key);
Run Code Online (Sandbox Code Playgroud)
但没有,有谁知道怎么做?
编辑:这是一个索引问题.抱歉!
我的帖子非常相似:App引擎批量加载器下载警告"__key__没有降序索引,执行串行下载"
我基本上想要做同样的事情.
基本上,我使用以下内容来下载我的一种类型的所有实例:
appcfg.py download_data --config_file=bulkloader.yaml --kind=ModelName --filename=ModelName.csv --application=MyAppid --url=http://MyAppid.appspot.com/remote_api
Run Code Online (Sandbox Code Playgroud)
如果类型的实例多于批量大小,那么我会收到此警告:
No descending index on __key__, performing serial download
Run Code Online (Sandbox Code Playgroud)
这导致我只下载大约6500个实体需要471.4秒(根据bulkloader工具完成后).这真的很慢,因为我还有其他4种甚至更大(大约15,000个实体)!
另外根据我的Mac的活动监视器,我只以大约24Kb /秒的速度下载,如bulkloader输出中的带宽所示:
[INFO ] Logging to bulkloader-log-20110514.011333
[INFO ] Throttling transfers:
[INFO ] Bandwidth: 250000 bytes/second
[INFO ] HTTP connections: 8/second
[INFO ] Entities inserted/fetched/modified: 20/second
[INFO ] Batch Size: 10
Run Code Online (Sandbox Code Playgroud)
1)如何摆脱这个警告"__key__没有下降索引,执行串行下载"以获得并行下载速度?
我认为我的问题的答案是添加降序索引.就像是:
<datastore-index kind="Game" ancestor="false" source="manual">
<property name="id" direction="desc"/>
</datastore-index>
Run Code Online (Sandbox Code Playgroud)
我尝试将其添加到datastore-indexes.xml文件中.
它已成功部署,但我查看了Google上管理门户网站上的数据存储区索引,但我没有看到它正在服务或正在构建.无论如何,为了它,我重申下面的命令,它仍然很慢......
我也尝试将相同的xml,但使用source ="auto",添加到datastore-indexes-auto.xml文件.但是,当我尝试部署我的eclipse抱怨时出现以下错误:
java.io.IOException: Error posting to URL: https://appengine.google.com/api/datastore/index/add?app_id=<My_APP_ID>&version=1&
400 …Run Code Online (Sandbox Code Playgroud) 我有以下的嗜好.
GrandParent - >父母 - >孩子
父母和孩子使用@Parent Ref<GrandParent>并@Parent Ref<Parent>创建父母关系.
我试图用一个很好的方法来进行级联删除GrandParent.
我当然可以加载所有孩子,从他们生成密钥并按键删除.这看起来非常低效.是否存在我可以通过父查询并将查询结果转换为键列表而无需进行完整提取的内容?
欢迎任何想法或第三方图书馆.