我收到此错误:
java.lang.IllegalStateException: Ref<?> value has not been initialized
at com.googlecode.objectify.impl.ref.StdRef.get(StdRef.java:55)
at com.mycomp.simplify.KeyValueVersion.getVersion(KeyValueVersion.java:59)
尝试持久化此实体时:
public class KeyValueVersion {
@Id
private Long id;
private Ref<Key> key;
private Ref<Value> value;
private Ref<Version> version;
public KeyValueVersion() {
}
public KeyValueVersion(Key key, Value value, Version version) {
setKey(key);
setValue(value);
setVersion(version);
}
public Key getKey() {
return this.key.get();
}
public void setKey(Key key) {
this.key = Ref.create(key.getKey(), key);
}
public Value getValue() {
return this.value.get();
}
public void setValue(Value value) {
this.value = Ref.create(value.getKey(), value);
}
public Version getVersion() {
return this.version.get();
}
public void setVersion(Version version) {
this.version = Ref.create(version.getKey(), version);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
这就是我坚持实体的方式:
public Version put(final Key key, final Value value) throws KeyException {
final ExceptionWrapper ew = new ExceptionWrapper();
Version v = ofy().transact(new Work<Version>() {
@Override
public Version run() {
Version v = null;
try {
Version version = new Version(new Date().getTime());
ofy().save().entity(key).now();
ofy().save().entity(value).now();
ofy().save().entity(version).now();
com.googlecode.objectify.Key<KeyValueVersion> result =
ofy().save().entity(new KeyValueVersion(key, value, version)).now();
v = get(result).getVersion();
} catch (EntityNotFoundException e) {
ew.exception = new KeyPersistenceFailureException(key);
}
return v;
}
});
if(ew.exception != null) throw ew.exception;
return v;
}
这是运行这些代码的主要测试:
@Test
public void testCreateFetch() throws KeyException {
Value val = Value.createValue("John".getBytes());
Key key = Key.createKey("uid:john:fname");
Version ver = sfy.put(key, val);
}
- 的静态
createXxx
方法Key
,Value
并且Version
只是创建这些类的新实例 - 该
put()
方法将实体保存到数据存储中,然后将它们传递到KeyValueVersion
然后保存到数据存储中