Google app engine GAE/JPA/DataNucleus:尝试持久化实体时出现奇怪异常(IllegalArgumentException:字段外索引:-1)
在实体中添加此嵌入字段后,出现异常:Google app engine GAE/JPA/DataNucleus:尝试持久化实体时出现奇怪异常(IllegalArgumentException:字段外索引:-1),google-app-engine,jpa,google-cloud-datastore,datanucleus,Google App Engine,Jpa,Google Cloud Datastore,Datanucleus,在实体中添加此嵌入字段后,出现异常: @Entity public class Team extends DataObject { @Embedded private TeamEvolution teamEvolution = new TeamEvolution(); // NEW FIELD: @Embedded // @AttributeOverrides({ @AttributeOverride(name = "buffer", column =
@Entity
public class Team extends DataObject
{
@Embedded
private TeamEvolution teamEvolution = new TeamEvolution();
// NEW FIELD:
@Embedded
// @AttributeOverrides({ @AttributeOverride(name = "buffer", column = @Column) })
// @Enumerated
private ScoutBuffer scoutBuffer;
...
这家伙很简单:
@Embeddable
public class ScoutBuffer
{
private static final int BUFFER_SIZE = 150;
@Basic
private List<String> buffer;
... // from here on there are only methods...
我不认为有什么需要做的,但在合并实体之前,我必须使用JDOHelper.makeDirty
,以便它感觉到我修改了scoutBuffer
:
team.getScoutBuffer().add(playerIds);
JDOHelper.makeDirty(team, "scoutBuffer");
em.merge(team);
正如您在代码中看到的,我尝试了所描述的解决方法,但没有成功。奇怪的是那是2009年的。。。顺便说一下,我正在使用GAE1.7.0。此外,我还尝试清理/重新增强数据模型。如果是从2009年开始的,为什么不使用更新的版本呢?@NeilStockton链接指向2009年的一篇文章,但我使用的是GAE的最新版本,这很奇怪。
team.getScoutBuffer().add(playerIds);
JDOHelper.makeDirty(team, "scoutBuffer");
em.merge(team);