谷歌数据存储不是存储子对象

问题描述:

我有了一键内的另一个实体(文件)的实体课程。谷歌数据存储不是存储子对象

@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(); 
+0

我已经编辑了我的问题,上面提供了请求的代码。 我的saveAndGetKey函数在使用调试器进行调试时似乎工作,生成一个键值。 – KevMo 2009-07-14 01:24:53