Frage

Ich habe eine Entität Kurs, die einen Schlüssel zu einer anderen Einheit (Dokument) nach innen hat.

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

In einigen Test-Code mache ich einen neuen Kurs Einheit, und weisen Sie ein neues Dokument Einheit, und das Dokument-Entity beibehalten wird, wenn ich die Dokumenteigenschaft auf Kurs gesetzt. Wenn ich natürlich bestehen bleiben, wird es ohne Fehler bestehen bleiben, jedoch, sobald es das Dokument-Eigenschaft beibehalten wird null sein wird.

Irgendwelche Ideen? Hier ist meine Sparfunktion für den Kurs:

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;

 }

Bearbeiten hinzuzufügen:

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

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

 }

öffentliches Dokument getDocumentById (Long id) {

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

try {    d = pm.getObjectById (Document.class, ID);   } schließlich {    pm.close ();   }

Rückkehr d;  }

War es hilfreich?

Lösung

  • Wie sieht die Dokumentenklasse Look wie?
  • was bedeutet die DocumentServiceImpl Klasse aussehen?
  • Was macht Ihr Gerät zu testen für saveAndGetKey () aussehen? Ist es prüfen, ob der Rückgabewert ein gültiger Schlüssel ist? Sie können dann das Dokument im Datenspeicher nachschlagen?
  • Sind Ihre ServiceImpl Klassen PersistenceCapable oder PersistenceAware? Ich bin mir nicht sicher, ob sie auf Basis sein oder nicht brauchen nur auf das, was Sie uns gezeigt haben.

New Fehlerbehebung Idee unten: Was passiert, wenn Sie etwas Einfaches wie diese versuchen: Gerade jetzt, Course.document öffentlich machen. Dann sehen, ob dieser einfache Weg, um Ihre Einheiten zu schaffen, arbeitet.

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top