我有一个实体,我的一个属性是一个对象的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
当我向列表中添加新项目时它工作正常,但是当我删除某些内容时却没有 - 为什么会这样?我怎样才能让它发挥作用?
答案 0 :(得分:0)
制造脏东西会使它变脏,仅此而已;持久化/冲洗发生在......下一次交易开始后(根据JDO / JPA规范)或PM / EM关闭;没有调用makePersistent / persist会改变它。这不是DataNucleus“决定自己”不要坚持一个对象,它只是遵循规范。
如果您使用最近的GAE版本(v2.0),则可以使用非事务性原子持久化/删除(扩展到规范)。如果您使用SVN trunk(v2.1),您还可以进行非事务性原子更新(进一步扩展)。即使用最新的代码,你就相当于JDBC“autocommit”