GWT + JDO + ArrayList
-
12-09-2019 - |
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();
}
}
}
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);