dav*_*vid 10 java google-app-engine google-cloud-datastore
我需要有两个相同类型的对象.默认情况下,appengine不允许它,但我找到了这个参数:datanucleus.appengine.allowMultipleRelationsOfSameType,所以我可以保存两个相同类型的对象.
在调试模式下,在调用makePersistent方法之前,我检查了每个对象中的值,它们是不同的,但是,当我尝试从数据存储区恢复值时,它们是相同的.两者都有第二个对象的价值?
这段代码是保存对象FaseGAE:
manager = GAEDAOFactory.get().getPersistenceManager();
Key faseKey = KeyFactory.stringToKey(grupo.getFaseKey());
FaseGAE faseGAE = manager.getObjectById(FaseGAE.class, faseKey);
faseGAE.addGrupoGAE(grupoGAE);
faseGAE = manager.makePersistent(faseGAE);
manager.close();
Run Code Online (Sandbox Code Playgroud)
这段代码是为了获取对象:
manager = GAEDAOFactory.get().getPersistenceManager();
FaseGAE faseGAE2 = manager.getObjectById(FaseGAE.class, faseKey);
Run Code Online (Sandbox Code Playgroud)
FaseGAE对象:
@PersistenceCapable
public class FaseGAE {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent private List<GrupoGAE> grupos;
Run Code Online (Sandbox Code Playgroud)
GrupoGAE对象:
@PersistenceCapable
public class GrupoGAE {
@PrimaryKey
@Persistent (valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent private List<MyClass1> list;
Run Code Online (Sandbox Code Playgroud)
MyClass1对象:
@PersistenceCapable
public class MyClass1 {
@PrimaryKey
@Persistent (valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent private MyClass2 sameTypeObject1;
@Persistent private MyClass2 sameTypeObject2;
@Persistent private String testValue1;
@Persistent private String testValue2;
Run Code Online (Sandbox Code Playgroud)
MyClass2对象:
@PersistenceCapable
public class MyClass2{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
Run Code Online (Sandbox Code Playgroud)
testValue1和testValue2保持不同的值,但sameTypeObject1和sameTypeObject2的值为sameTypeObject2.我检查了数据存储区,并且使用不同的值创建了两个对象.似乎两者都指向相同的参考.
难道我做错了什么?
使用相同类型关系时缺少某些东西?
绝对AppEngine不允许相同类型的关系?
小智 1
我以前遇到过类似的问题,我不太确定你的确切问题是什么以及是否相同。但希望这个答案至少能为你指明正确的方向
然而,在将 java 与 GAE 结合使用时,您可以采用一些“最佳实践”。
1) 为类实现 Serialized,即公共类 FaseGAE 实现 Serialized - 这将使具有持久能力的类能够通过会话对象进行存储和检索。
2)您可以尝试使用 GAE 数据存储区的 objectify http://code.google.com/p/objectify-appengine/
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |