使用JDO和AppEngine的子属性

时间:2010-07-15 23:52:15

标签: google-app-engine jdo

我有以下代码:

@PersistenceCapable(identityType = IdentityType.APPLICATION,detachable =“true”) 公共类A {   @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)     @首要的关键     私钥键;

@Persistent
private B b;

@Persistent
private int id;

    // ...

}

@PersistenceCapable(identityType = IdentityType.APPLICATION,detachable =“true”) 公共课B {   @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)     @首要的关键     私钥键;

@Persistent
private int id;

    // ...

}

现在我需要做的是检索B的实例,并从A的实例中引用它,如下所示:

B b = DAL.getBById(1); A =新A(); a.setB(B);

当我传递给PersistenceManager的makePersistent()方法时,我不需要做两件事:

1)创建了一个新的B实例 2)参考A使得b为空

有人能告诉我我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

字段值可以包含Serializable类的实例,将实例的序列化值存储在Blob类型的单个属性值中。要告诉JDO序列化该值,该字段使用注释@Persistent(serialized = true)。 Blob值未编入索引,无法在查询过滤器或排序顺序中使用。

这是一个表示文件的简单Serializable类的示例,包括文件内容,文件名和MIME类型。这不是JDO数据类,因此没有持久性注释。

import java.io.Serializable; 

public class DownloadableFile implements Serializable { 
    private byte[] content; 
    private String filename; 
    private String mimeType; 

    // ... accessors ... 

}要将Serializable类的实例作为Blob值存储在属性中,请声明一个类型为类的字段,并使用@Persistent(serialized =“true”)注释:

import javax.jdo.annotations.Persistent; 
import DownloadableFile; 

// ... 
    @Persistent(serialized = "true") 
    private DownloadableFile file;

我的情况你可以使用

import java.io.Serializable;      
public class B implements Serializable { 
    private int xx; 
    ....
    ..........
 }

然后在数据类中声明它

@Persistent(serialized = "true")     
private B b;