Google app engine GAE,JDO如何按长/长类型查询主键

Google app engine GAE,JDO如何按长/长类型查询主键,google-app-engine,jdo,jdoql,Google App Engine,Jdo,Jdoql,我定义了一个基类,它有一个很长的主键,就像这样 @PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true") @Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE) public class ModelBase implements Serializable { @PrimaryKey @Persistent(va

我定义了一个基类,它有一个很长的主键,就像这样

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
@Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE)
public class ModelBase implements Serializable {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;
其他pojo扩展了模型库。 当我被jdoql这样的代码查询时

public List<PersonalSetting> getByIds(Long... Ids) {
    Query query = getQuery();
    query.setFilter("id ==:id");
    return (List<PersonalSetting>) query.execute(Ids);
}
我发现键类有“Id”字段,但我不能像“Id.Id==:Id”那样访问它。
有人能告诉我怎么修吗?多谢各位

无效的JDOQL。如果要在集合中查找元素,则需要 “:ids.contains(id)”


显然,说明您正在使用的Google持久性插件的版本是有意义的,然后是log/stacktrace

谢谢您的回复。我只是尝试了contains方法,它不起作用。我得到了相同的异常信息。看起来它们是同一种。我的项目中的gae sdk版本是1.6.4,我已经改回了1.6.3.1,那不是持久性插件的版本,也就是“datanucleus appengine”。在他们的插件中起作用的是一件事,我只是简单地引用了JDO规范的1.0.10.final和datanucleus核心是1.1.5。它们都包含在另一个java文件中的两个sdk版本中,该方法只有一个id参数,所以我写的是“id==”+id。这很好。然后我想是否需要任何选项?1.0.10.final非常旧。当我尝试将主键更改为字符串类型时,出现了一个2.0.0-finalWhen。这种情况再次发生。我的主字段是字符串,但它说不能转换为键。为什么?contains方法是如何工作的,我会为这个问题发狂。
java.lang.ClassCastException: [Ljava.lang.Long; cannot be cast to com.google.appengine.api.datastore.Key