2010-07-15 4 views
0

je le code suivant:propriétés d'enfants avec JDO et AppEngine

@PersistenceCapable (IdentityType = IdentityType.APPLICATION, détachable = "true") public class A { @Persistent (valueStrategy = IdGeneratorStrategy.IDENTITY) @PrimaryKey Clé privée;

@Persistent 
private B b; 

@Persistent 
private int id; 

    // ... 

}

@PersistenceCapable (IdentityType = IdentityType.APPLICATION, détachable = "true") public class B { @Persistent (valueStrategy = IdGeneratorStrategy.IDENTITY) clé privée clé @PrimaryKey ;

@Persistent 
private int id; 

    // ... 

}

Maintenant ce que je dois pouvoir le faire, est de récupérer une instance de B et y référer à une instance de A comme ceci:

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

Quand je passe un à la méthode de la PersistenceManager, deux choses que je ne ai pas besoin arriver makePersistent():

1) une nouvelle instance de B est créé 2) la référence A fait à b est nul

Quelqu'un pourrait-il me dire ce que je fais mal?

Merci!

Répondre

0

Une valeur de champ peut contenir une instance d'une classe sérialisable, en stockant la valeur sérialisée de l'instance dans une seule valeur de propriété de type Blob. Pour indiquer à JDO de sérialiser la valeur, le champ utilise l'annotation @Persistent (sérialisé = true). Les valeurs de BLOB ne sont pas indexées et ne peuvent pas être utilisées dans les filtres de requête ou les ordres de tri.

Voici un exemple de classe Serializable simple qui représente un fichier, y compris le contenu du fichier, un nom de fichier et un type MIME. Ce n'est pas une classe de données JDO, donc il n'y a pas d'annotation de persistance.

import java.io.Serializable; 

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

    // ... accessors ... 

} Pour stocker une instance d'une classe Serializable en tant que valeur de Blob dans une propriété, déclarer un champ dont le type est la classe, et utiliser l'annotation @Persistent (sérialisé = "true"):

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

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

Je votre cas, vous pouvez utiliser

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

déclarer ensuite dans votre classe de données

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