Question

Je reçois nul ArrayList dans un programme que je développe. Pour des fins de test, j'ai créé cet exemple vraiment petit qui a toujours le même problème. Je l'ai déjà essayé diférents les clés primaires, mais le problème persiste.

Toutes les idées ou suggestions?

classe 1-employé

@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();
        }
    }
}
Était-ce utile?

La solution

Votre classe d'employés n'a pas détachable = "true".

Vous devez modifier

@PersistenceCapable(identityType = IdentityType.APPLICATION)

à

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

Autres conseils

est-il important que addEmployee, vous obtenez le PersistenceManager comme ceci:

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

mais getEmployees vous l'appelez comme ceci

PersistenceManager pm = getPersistenceManager();

sans utiliser PMF.get().

J'ai changé un peu le code, et tout est normal maintenant, encore je ne sais pas ce qui a causé ce problème.

J'utilise des listes maintenant au lieu des collections ** (1) , je reviens tout comme un simple tableau cuvette RPC (2) ** et je changé la façon dont je l'ai fait la requête ** (3) **.

(1) Liste des résultats = (List) query.execute ();

(2) retour (Employé []) employees.toArray (nouveau employé [0]);

(3) Query query = pm.newQuery (Employee.class);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top