Pregunta

Me estoy poniendo un ArrayList Null en un programa que estoy desarrollando. Para propósitos de prueba que creé esto realmente pequeño ejemplo que sigue teniendo el mismo problema. Ya he probado diferentes claves principales, pero el problema persiste.

Cualquier idea o sugerencia?

clase 1-Empleado

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Employee {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
    private String key;

    @Persistent
    private ArrayList<String> nicks;

    public Employee(ArrayList<String> nicks) {
        this.setNicks(nicks);
    }

    public String getKey() {
        return key;
    }

    public void setNicks(ArrayList<String> nicks) {
        this.nicks = nicks;
    }

    public ArrayList<String> getNicks() {
        return nicks;
    } 
}

2-EmployeeService

public class BookServiceImpl extends RemoteServiceServlet implements
EmployeeService {

    public void addEmployee(){

        ArrayList<String> nicks = new ArrayList<String>();
        nicks.add("name1");
        nicks.add("name2");

        Employee employee = new Employee(nicks);

        PersistenceManager pm = PMF.get().getPersistenceManager();
        try {
            pm.makePersistent(employee);
        } finally {
            pm.close();
        }
    }

    /**
     * @return
     * @throws NotLoggedInException
     * @gwt.typeArgs <Employee>
     */
    public Collection<Employee> getEmployees() {

        PersistenceManager pm = getPersistenceManager();

        try {
            Query q = pm.newQuery("SELECT FROM " + Employee.class.getName());

            Collection<Employee> list =
                pm.detachCopyAll((Collection<Employee>)q.execute());

            return list;

        } finally {
            pm.close();
        }
    }
}
¿Fue útil?

Solución

Su clase Employee no tenía desmontable = "true".

Debe cambiar

@PersistenceCapable(identityType = IdentityType.APPLICATION)

a

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")

Otros consejos

¿Es significativo que en addEmployee, se obtiene el PersistenceManager como esto:

PersistenceManager pm = PMF.get().getPersistenceManager();

pero en GetEmployees se llame como esto

PersistenceManager pm = getPersistenceManager();

sin utilizar PMF.get().

He cambiado el código un poco, y todo es normal ahora, todavía no sé lo que causó este problema.

Estoy usando listas ahora en lugar de las colecciones ** (1) , vuelvo todo como una simple matriz A través del RPC (2) ** y cambiado la forma en que hice la consulta ** (3) **.

(1) resultados list = (Lista) query.execute ();

(2) retorno (Employee []) employees.toArray (nuevo Empleado [0]);

(3) consulta consulta = pm.newQuery (Employee.class);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top