0

我正在使用 Google App Engine,但是当我尝试在数据存储中存储对象时遇到了一些问题。我正在使用 Eclipse Indico 平台、JDO 来描述我想要存储的对象以及用于用户界面的 JSF 技术。当我在 ecliplse 平台上运行我的应用程序时,有时它工作正常(对象存储正确),有时它不起作用,当代码执行时没有任何反应(也没有错误消息),如果我删除文件 war/WEB -INF/appengine-generated/local_db.bin 在执行之前不会重新创建它。当我在 Google App Engine 上运行相同的应用程序时,问题是一样的:在执行过程中什么都没有发生,或者有时最后一个存储的对象被最后一个替换。我不明白为什么同一个应用程序,没有任何改变就可以工作,而且没有理由就不能工作。

这是我的对象之一(省略了 getter 和 setter 方法):

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class User implements Serializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long idUser; 
@Persistent
private String email;
@Persistent
private String name;
@Persistent
private String surname;
@Persistent
private String password;

这是我用来存储对象的代码:

public Utente creaUtente(User user) {
    PersistenceManager pm = PMF.get().getPersistenceManager();

    try {
        user = pm.makePersistent(user);
    } catch (Exception e) {        // TODO: handle exception
        System.out.println(e.getMessage() + "DB-creaUtente");
    }
    finally{
        pm.close();
    }
    return user;        
  }

有什么想法可以解决这个问题吗?

4

2 回答 2

0

您有 2 个问题,首先是您正在使用带有通用 catch 的 try 块,因此所有错误都不会报告,因为您无法System.out.println在 App Engine 中使用。您需要使用应用引擎日志记录服务来查看错误。或者,如果应用程序仍在开发中,您可以消除所有通用 try 块,以便获得真正的堆栈跟踪。

至于为什么它不能 100% 工作,那里没有足够的代码让我诊断它。

于 2012-06-11T21:43:06.880 回答
0

我无法回答您为什么稍后创建用户会覆盖先前根据您提供的代码创建的用户,但我怀疑这与您传入的参数 USER 有关。

您能否检查一下您是否已将用户实体 (idUser) 的主键设置为 creaUtente() 函数?

由于 User 类的主键是自动生成的,您应该将其留空,系统会为您生成 id。如果您提供一个 id,那么第二次写入将覆盖现有的,因为它们共享相同的 id。

于 2012-06-12T08:48:15.293 回答