Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为AppEngine实体添加creationTime_Java_Google App Engine_Objectify - Fatal编程技术网

Java 如何为AppEngine实体添加creationTime

Java 如何为AppEngine实体添加creationTime,java,google-app-engine,objectify,Java,Google App Engine,Objectify,我使用Objectify在AppEngine上持久化实体 在两个实体中,我想存储creationTime和lastUpdateTime 我的目的是在第一次创建实体时将creationTime添加到实体中。 而无论何时更新实体,都应更新LastUpdate时间 对于lastUpdateTime,我可以轻松地使用@preperist附加一个钩子来修改lastUpdateTime 但每当我对实体进行更新时,我都希望保留creationTime 现在一个解决方案是获取creationTime,然后将其添

我使用Objectify在AppEngine上持久化实体

在两个实体中,我想存储creationTime和lastUpdateTime

我的目的是在第一次创建实体时将creationTime添加到实体中。 而无论何时更新实体,都应更新LastUpdate时间

对于lastUpdateTime,我可以轻松地使用
@preperist
附加一个钩子来修改lastUpdateTime

但每当我对实体进行更新时,我都希望保留creationTime

现在一个解决方案是获取creationTime,然后将其添加到我的实体中

有没有什么方法可以让我不必在每次保存之前获取creationTime

我尝试了
@NotSaved(IfNull)
的组合,然后将creationTime设置为null,希望Objectify会忽略这一点,但实际行为是它会在数据存储上设置creationTime=null

作为参考,我的实体如下所示:

public class TestEntity {
  @Id
  Long id;
  Date creationTime;
  Date lastUpdateTime;
  String mutableField;
  ...
  // Constructor1
  public TestEntity(Long id, Date date, String mutableField) {
    this.id = id;
    creationTime = date;
    lastUpdateTime = date;
    this.mutableField = mutableField;
  }

  // Constructor2
  public TestEntity(Long id, String mutableField) {
    this.id = id;
    lastUpdateTime = new Date();
    this.mutableField = mutableField;
  }
}
编辑1:
很抱歉我想我的问题是完全正确的。我修改了我的测试定义。让我们假设这个TestEntity包含两个不可变字段(id,creationTime)和两个可变字段(lastUpdateTime,mutableField2)

现在,根据上下文,这五个字段都可能被发送到客户端,然后客户端更新可变字段并发送更新可变字段的请求

为了简化讨论,让我们假设使用会话和其他方式(例如名称空间),我们可以确保允许用户修改该实体

现在我打算做以下事情:
*首次创建实体时,请使用构造函数1。
*当客户端请求此实体时,服务器发送(id和可变字段)。
*客户端发送一个请求,用Id为的可变字段的新值更新实体。
*现在在服务器端,我想在不丢失creationTime的情况下更新可变字段

现在,这可以通过首先从数据存储中获取实体,然后更新可变字段,然后再次持久化来完成。我想知道是否有更好的解决方案。

使用构造函数

public class TestEntity {
    public TestEntity(...your normal init params...) {
        creationTime = new Date();
    }
}

谢谢我想我的问题没有给出完整的图片,所以我及时更新了。只要实体在AppEngine中,您提出的解决方案就可以很好地工作。但如果我将此实体发送给客户机,而客户机希望修改实体的某些部分,那么要么(a)我必须将creationTime发送给客户机,并期望它不会修改,要么(b)从数据存储中提取数据,并根据客户机的请求更新字段(不涉及creationTime)。我想知道这两个步骤是否都可以避免。@Arjun当您向客户机发送数据时,您必须以客户机识别的某种格式对其进行序列化。如何在该实体和数据存储实体之间转换完全取决于您。