2

我有一个实体,我的一个属性是一个对象的 ArrayList,它是序列化的。我正在尝试删除列表中的一个元素并保留该实体。在本地一切正常,但在部署时却不行。

我的代码:

@Inject
public Repository<User> userRepo;
...
Leader leader = (Leader) item.getModelObject();
...
MySession.get().getUser().getLeaders().remove(leader);
JDOHelper.makeDirty(MySession.get().getUser(), "leaders");
userRepo.persist(MySession.get().getUser());

用户实体中的属性定义:

@Persistent(defaultFetchGroup = "true", serialized = "true")
@Extension(vendorName = "datanucleus", key = "gae.unindexed", value = "true")
private ArrayList<Leader> leaders = new ArrayList<Leader>();

我正在使用 datanucleus-core 版本 1.1.6、jdo2-api 2.3-eb 和 datanucleus-appengine 1.0.10

当我向列表中添加新项目时它可以正常工作,但当我删除某些内容时它不能正常工作 - 为什么会这样?我怎样才能让它发挥作用?

4

1 回答 1

0

把东西弄脏了就弄脏了,仅此而已;在...开始下一个事务(根据 JDO/JPA 规范)或关闭 PM/EM 之后发生持久/刷新;没有调用 makePersistent/persist 会改变这一点。这不是 DataNucleus “自己决定”不持久化一个对象,它只是遵循规范。

如果您使用最新的 GAE 版本 (v2.0),您可以拥有非事务性原子持久/删除(对规范的扩展)。如果您使用 SVN 中继(v2.1),您还可以进行非事务性原子更新(进一步扩展)。即使用最新的代码,你有相当于 JDBC“自动提交”

于 2012-05-11T08:41:18.450 回答