次のエラーが表示されます。
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
保存されます。