Question

J'ai un cours d'entité qui a une clé à une autre entité (document) à l'intérieur.

@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);
 }

Dans un code de test je fais une nouvelle entité de cours, et lui attribuer une nouvelle entité de document, et l'entité document est conservé lorsque je mets le document propriété sur la bonne voie. Quand je persiste bien sûr, il persistera sans erreur, mais une fois qu'il est conservé la propriété de document sera nulle.

Toutes les idées? Voici ma fonction de sauvegarde pour les cours:

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;

 }

Modifier pour ajouter:

@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);
 }

de 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;

 }

Document public getDocumentById (id Long) {

PersistenceManager h = PMF.get () getPersistenceManager ().   Document d = new Document ();

try {    d = pm.getObjectById (Document.class, id);   } enfin {    pm.close ();   }

retour d;  }

Était-ce utile?

La solution

  • Qu'est-ce que l'apparence de la classe de document comme?
  • qu'est-ce que l'apparence de la classe DocumentServiceImpl comme?
  • Qu'est-ce que votre test unitaire pour saveAndGetKey () ressembler? Est-il vérifier que la valeur de retour est une clé valide? pouvez-vous regarder ensuite ce document dans le magasin de données?
  • Vos classes ServiceImpl PersistenceCapable, ou PersistenceAware? Je ne sais pas si elles doivent être ou non basée seulement sur ce que vous nous avez montré.

Nouveau Dépannage Idée ci-dessous: Qu'est-ce qui se passe si vous essayez quelque chose de simple comme ceci: Juste pour l'instant, rendre public Course.document. Ensuite, voir si cette façon plus simple de créer vos entités fonctionne.

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top