gpt4 book ai didi

java - 从 Google App Engine 中的集合中删除不会被持久化

转载 作者:太空宇宙 更新时间:2023-11-04 08:58:11 25 4
gpt4 key购买 nike

我在 Problems while saving a pre-persisted object in Google App Engine (Java) 中看到类似的问题,事实上我没有在我的持久性管理器上调用 close() 。但是,我现在正在调用 close,但我的对象更新没有被持久化。具体来说,我想从集合中删除一个元素,并保存那个较小的集合。这是与持久性管理器相关的代码,它不会引发异常,但不会保存我的数据:

    UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();

PersistenceManager pm = PMF.get().getPersistenceManager();
UserProfileInfo userProfile = pm.getObjectById(UserProfileInfo.class,user.getUserId());
int presize = userProfile.getAccounts().size();
AccountInfo ai = userProfile.removeAccount(id);
int postsize = userProfile.getAccounts().size();
UserProfileInfo committed = (UserProfileInfo)pm.makePersistent(userProfile);
int postcommitsize = committed.getAccounts().size();
pm.close();

这是 UserProfileInfo 类的相关部分:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
class UserProfileInfo {
@Persistent
private Set<AccountInfo> accounts;

public AccountInfo removeAccount(Long id) throws Exception {
Iterator<AccountInfo> it = accounts.iterator();
StringBuilder sb = new StringBuilder();
while(it.hasNext()) {
AccountInfo acctInfo = it.next();
Long acctInfoId = acctInfo.getId();
if(acctInfoId.equals(id)) {
it.remove();
return acctInfo;
}
sb.append(" ");
sb.append(acctInfoId);
}
throw new Exception("Cannot find id " + id + " Tried " + sb.toString());
}
}

最佳答案

所以看起来答案是拥有的对象不能使用长主键。 datanucleus 增强器告诉我这是我添加的另一种对象类型。我不确定为什么它跳过了我的 AccountInfo 对象的此警告。

我将 key 切换为字符串,并更改了注释以正确使用该字符串,现在我可以从集合中删除。

关于java - 从 Google App Engine 中的集合中删除不会被持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1677952/

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