谷歌数据存储不是存储子对象
问题描述:
我有了一键内的另一个实体(文件)的实体课程。谷歌数据存储不是存储子对象
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class Course{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent private Key document;
public Document getDocument() {
if (document != null)
return new DocumentServiceImpl().getDocumentById(document.getId());
return null;
}
public void setDocument(Document document) {
if (document != null)
this.document = new DocumentServiceImpl().saveAndGetKey(document);
}
在一些测试代码,我做一个新课程的实体,并分配一个新的文档实体,当我设置文档属性的过程中,文档实体依然存在。当我坚持课程时,它会持续存在,没有错误,但一旦持续,文档属性将为空。
任何想法?这是我保存功能的过程:
public Boolean save(Course c){
Boolean isSaved = false;
PersistenceManager pm = PMF.get().getPersistenceManager();
try{
pm.makePersistent(c);
isSaved = true;
}
catch(Exception e){
e.printStackTrace();
isSaved = false;
}
finally{
pm.close();
}
return isSaved;
}
编辑补充:
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class Document{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent private String data;
@Persistent private Set<Key> dTags;
@Persistent private Date dateCreated;
@Persistent private Date dateEdited;
public Document(){
this.dateCreated = new Date();
}
public Long getId() {
if (key == null){
return null;
} else {
return key.getId();
}
}
public void setId(Long id) {
if (id != null)
key = KeyFactory.createKey(this.getClass().getSimpleName(), id);
}
从DocumentServicesImpl:
public Key saveAndGetKey(Document d) {
try{
if (d.getKey() == null){
save(d);
}
return d.getKey();
} catch (Exception e){
return null;
}
}
public Boolean save(Document d) {
Boolean isSaved = false;
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.makePersistent(d);
isSaved = true;
} catch (Exception e) {
e.printStackTrace();
isSaved = false;
}finally{pm.close();}
return isSaved;
}
公共文件getDocumentById(长ID){
的PersistenceManager点= PMF.get()。getPersistenceManager(); Document d = new Document();
尝试{ d = pm.getObjectById(Document.class,ID); } finally { pm.close(); }
返回d; }
答
- 什么是文件类看起来像 ?
- DocumentServiceImpl类是什么样的?
- 什么是对 saveAndGetKey单元测试()是什么样子?它检查返回值是否是有效的密钥?你可以在数据存储中查找该文档吗?
- 是你的ServiceImpl类 PersistenceCapable,或 PersistenceAware?我不确定他们是否需要成为或不是基于您向我们展示的内容。
新理念排除以下: 如果你尝试一些简单的像这样的会发生什么: 只是为了现在,让Course.document公开。然后看看这种更简单的创建实体的方式是否有效。
pm = yourPMfactory.getPersistenceManger();
Course c = new Course();
Document d = new Document();
c.document = d;
pm.makePersistent(c);
Key myKey = c.getKey();
Course c2 = (Course) pm.getObjectById(Course.class, myKey.getId());
assertTrue(c.document != null); //or however your favorite test suite does assertions.
pm.close();
我已经编辑了我的问题,上面提供了请求的代码。 我的saveAndGetKey函数在使用调试器进行调试时似乎工作,生成一个键值。 – KevMo 2009-07-14 01:24:53