Java 如何为AppEngine实体添加creationTime
我使用Objectify在AppEngine上持久化实体 在两个实体中,我想存储creationTime和lastUpdateTime 我的目的是在第一次创建实体时将creationTime添加到实体中。 而无论何时更新实体,都应更新LastUpdate时间 对于lastUpdateTime,我可以轻松地使用Java 如何为AppEngine实体添加creationTime,java,google-app-engine,objectify,Java,Google App Engine,Objectify,我使用Objectify在AppEngine上持久化实体 在两个实体中,我想存储creationTime和lastUpdateTime 我的目的是在第一次创建实体时将creationTime添加到实体中。 而无论何时更新实体,都应更新LastUpdate时间 对于lastUpdateTime,我可以轻松地使用@preperist附加一个钩子来修改lastUpdateTime 但每当我对实体进行更新时,我都希望保留creationTime 现在一个解决方案是获取creationTime,然后将其添
@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当您向客户机发送数据时,您必须以客户机识别的某种格式对其进行序列化。如何在该实体和数据存储实体之间转换完全取决于您。