Google app engine GoogleAppEngine/JPA:使用可嵌入类的奇怪行为
我有一个Google app engine GoogleAppEngine/JPA:使用可嵌入类的奇怪行为,google-app-engine,jpa,google-cloud-datastore,datanucleus,Google App Engine,Jpa,Google Cloud Datastore,Datanucleus,我有一个Embaddable类,它有一个列表,除非我也修改了另一个字段,否则不会保存其修改。请看一看,以了解: @Embeddable public class EmbeddableClass { private Integer someField; @Basic private List<String> someList; public EmbeddableClass() {} public Integer getSomeField(
Embaddable
类,它有一个列表
,除非我也修改了另一个字段,否则不会保存其修改。请看一看,以了解:
@Embeddable
public class EmbeddableClass {
private Integer someField;
@Basic
private List<String> someList;
public EmbeddableClass() {}
public Integer getSomeField() {
return someField;
}
public void setSomeField(Integer someField) {
this.someField = someField;
}
public List<String> getSomeList() {
return someList;
}
public void setSomeList(List<String> someList) {
this.someList = someList;
}
}
该行必须带有setSomeField
,否则在我第二次为给定用户运行测试时,“更改前大小”将为0
最后,这就是可嵌入类在其所有者(classTeam
)中的定义方式:
我使用的是GAE SDK 1.7.0。这能解决您的问题吗?不,我不能使用JPA 2.0(没有时间升级和测试所有内容),OP没有使用GAE,我没有收到任何异常。请尝试将您的收藏标记为脏的,我不确定GAE或Datanucleus,但JDOHelper有此功能。@JMelnik非常感谢<代码>JDOHelper.makeDirty(user.getMainTeam(),“ec”)代码>使它工作!不过,这是一个bug,不是吗?如果是这样的话,我希望有人回答这个问题,否则我可以用这些信息接受你的回答。这是一个bug还是一个bug并不重要,因为正如你所说,你没有使用最新的版本(而且你还有一个解决方法)。事实上,您使用的是一个古老的版本(2009年初)。如果你使用当前版本发现问题,用测试用例演示,并在问题跟踪器中向谷歌报告,它就会变成一个bug;这就是他们想知道这些事情的方式。
// ... lookup entity user...
log.severe("some list size before changing: " + user.getMainTeam().getEc().getSomeList().size());
//user.getMainTeam().getEc().setSomeField(new Random().nextInt()); // <- PROBLEM HERE!
user.getMainTeam().getEc().getSomeList().add("darn");
// ... persist entity user...
@Embedded
private EmbeddableClass ec;
public EmbeddableClass getEc() {
return ec;
}
public void setEc(EmbeddableClass ec) {
this.ec = ec;
}