Pregunta

Tengo un Curso entidad que tiene una clave a otra entidad (documento) en el interior.

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

En algún código de prueba que crea una nueva entidad de golf, y asignar una nueva entidad de documentos, y la entidad documento se conserva cuando me puse la propiedad de documento en curso. Cuando persisto supuesto, persistirá sin error, sin embargo, una vez que se conserva la propiedad de documento será nulo.

¿Alguna idea? Aquí es mi función, salvo por supuesto:

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;

 }

Editar para añadir:

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

 }

Documento público getDocumentById (Long id) {

PersistenceManager pm = PMF.get () getPersistenceManager ().;   Documento d = nuevo documento ();

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

retorno d;  }

¿Fue útil?

Solución

  • ¿Cómo es la clase de documento como?
  • ¿Cómo es la clase DocumentServiceImpl como?
  • ¿Qué hace su prueba de la unidad de saveAndGetKey () parece? ¿Se comprueba que el valor de retorno es una clave válida? se puede entonces buscar ese documento en el almacén de datos?
  • ¿Son sus clases ServiceImpl , O marcarlo PersistenceAware? No estoy seguro de si tienen que ser o no basado sólo en lo que nos has mostrado.

Idea Nueva Solución de problemas a continuación: ¿Qué ocurre si se intenta algo tan simple como esto: Sólo por ahora, hacer público Course.document. Luego ver si de esta manera más simple de crear sus entidades funciona.

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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top