gpt4 book ai didi

java - 使用 JDO 和 GAE 更新对象

转载 作者:行者123 更新时间:2023-11-30 09:57:53 25 4
gpt4 key购买 nike

因此,我正在使用 Wicket 创建一个将在 google 应用引擎上运行的小型网络应用程序。我正在使用 JDO,到目前为止,在保存数据(插入)或查询相同数据对象的数据方面没有任何问题。也许我遗漏了一些基本的东西,我正在尝试获取这些持久对象之一,更改两个值,然后我希望在数据存储中更新修改后的对象。

我有一个持久化的用户对象。我可以查询这个所以我知道对象本身有正确的注释。

我正在运行以更新它的代码是:

final PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction trans = pm.currentTransaction();
try{
trans.begin();
user.setLoginCount(user.getLoginCount()+1);
user.setLastLoginTime(new Date());
trans.commit();
}finally{
if (trans.isActive()) {
trans.rollback();
System.out.println("----transaction rollback - submitLogin----");
}
pm.close();
}

这是我想要更改的两件事的用户对象注释...

@Persistent
private Date lastLoginTime;

@Persistent
private int loginCount = 0;

我在这段代码之后立即进行了查询,它在我更改值之前返回了相同的对象。
知道我做错了什么吗?

最佳答案

默认情况下,JDO 对象仅在创建它们的 PersistenceManager 打开时才有效。你说你已经在用户对象上调用了 makePersistent() 。这意味着您在上面的代码中向我们展示的那个之前打开了另一个 PersistenceManager。当您关闭那个 PersistenceManager(大概是您关闭了它)时,您的对象变得无效,(非正式地说。)

根据您想做什么,您有两种选择。

  1. 您可以 detach您的用户对象,这将允许它在其原始持久性管理器的上下文之外拥有生命。

  2. 您可以使用刚创建的新 PersistenceManager 获取对象的新副本

这里是选项 #2 的一些代码:

trans.begin();
User user = (User) pm.getObjectById(User.class,"userkeyhere");
user.setLoginCount(user.getLoginCount()+1);
user.setLastLoginTime(new Date());
trans.commit();

关于java - 使用 JDO 和 GAE 更新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1394933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com