Google app engine 为什么JDO类会破坏Guava多重映射索引?
我无法使用下面的JDO Score类创建多重映射索引。如果我用Object[]代替Score,一切都很好。我认为问题在于Score类不可序列化?我在分数课上遗漏了什么 分数等级:Google app engine 为什么JDO类会破坏Guava多重映射索引?,google-app-engine,jdo,guava,graniteds,Google App Engine,Jdo,Guava,Graniteds,我无法使用下面的JDO Score类创建多重映射索引。如果我用Object[]代替Score,一切都很好。我认为问题在于Score类不可序列化?我在分数课上遗漏了什么 分数等级: @PersistenceCapable(identityType=IdentityType.APPLICATION, detachable="true") @javax.jdo.annotations.Version(strategy=VersionStrategy.VERSION_NUMBER,column="VER
@PersistenceCapable(identityType=IdentityType.APPLICATION, detachable="true")
@javax.jdo.annotations.Version(strategy=VersionStrategy.VERSION_NUMBER,column="VERSION",
extensions={@Extension(vendorName="datanucleus", key="field-name",value="version")})
public class Score implements Serializable {
private static final long serialVersionUID = -8805789255398748271L;
@PrimaryKey
@Persistent(primaryKey="true", valueStrategy=IdGeneratorStrategy.IDENTITY)
private Key id;
private Long version;
@Persistent
private String uid;
@Persistent
private Integer value;
}
多重映射索引:
List<Score> rows = new ArrayList(scores);
Multimap<Key, Score> grouped = Multimaps.index(rows,
new Function<Score, Key>() {
public Key apply(Score item) {
return (Key) item.getObjKey();
}
});
列表行=新的ArrayList(分数);
Multimap分组=Multimaps.index(行,
新函数(){
公钥应用(分数项){
return(Key)item.getObjKey();
}
});
首先,如果你打算使用番石榴,你可能应该使用真正的番石榴版本,而不是重新打包供app engine内部使用的代码
也就是说,看起来(假设重新打包的代码与当前发布的Guava代码的工作方式相同)至少有一个
Score
对象的getObjKey()
方法必须返回null
ImmutableMultimap
s不允许null
键或值。首先,如果您要使用Guava,您可能应该使用真实版本的Guava,而不是在app engine中重新打包以供内部使用的代码
也就是说,看起来(假设重新打包的代码与当前发布的Guava代码的工作方式相同)至少有一个
Score
对象的getObjKey()
方法必须返回null
ImmutableMultimap
s不允许null
键或值。您到底遇到了什么问题?下面的Multimap索引适用于本机对象[]。上面带有Score类的代码不存在。为什么分数类在多重映射索引中不起作用<代码>列表行=新阵列列表(obj1、obj2、obj3);Multimap group=Multimaps.index(行,新函数(){public Key apply(Object[]item){return(Key)item.getObjKey();}})代码>呃,那应该不行。数组没有getObjKey()
方法。你需要解释你所说的“有效”或“无效”的确切含义。编译器错误?运行时异常?意外的结果?你的Score
类似乎也没有getObjKey()
方法,所以我不知道该怎么想。Score类有一个getObjKey方法,这不是问题所在,我在这篇文章中省略了它…抱歉。从Multimaps.index(rows,new Function()列表行包含调试器中的数据,它通过…PersistenceManager pm=pmf.getPersistenceManager();pm.getFetchPlan().setdetacheoptions(FetchPlan.DETACH_UNLOAD_字段);列表行=null;查询q=pm.newQuery(Score.class);行=(List)q.execute()填充;
列表中必须有空元素?如果我传入一个用属性填充的java.lang.Object,也不例外。顺便说一下,最好通过编辑问题而不是注释来发布附加信息,如堆栈跟踪。这有助于使问题易懂,您也可以格式化它。您到底遇到了什么问题aving?下面的多重映射索引与本机对象[]一起工作。上面的代码与Score类一起工作。为什么Score类在多重映射索引中不工作?List rows=new ArrayList(obj1,obj2,obj3);Multimap group=Multimaps.index(rows,new Function(){public Key apply(Object[]项){return(Key)item.getObjKey();}}});
Er,这不应该工作。数组没有getObjKey()
方法。您需要解释“工作”或“不工作”的确切含义。编译器错误?运行时异常?意外结果?您的Score
类似乎没有getObjKey()
method,所以我不确定该怎么想。Score类有一个getObjKey方法,这不是问题,我在这篇文章中省略了它…很抱歉。从Multimaps.index(rows,new Function()列表行包含调试器中的数据,它是通过…PersistenceManager pm=pmf.getPersistenceManager()填充的);pm.getFetchPlan().setDepartmentOptions(FetchPlan.DETACH_UNLOAD_字段);List rows=null;Query q=pm.newQuery(Score.class);rows=(List)q.execute()
列表中必须有空元素?如果我传入一个用属性填充的java.lang.Object,也不例外。顺便说一句,最好通过编辑问题而不是注释来发布附加信息,如堆栈跟踪。这有助于理解问题,您也可以格式化它。