GWT + JDO + ArrayList
-
12-09-2019 - |
Pergunta
Estou recebendo um nulo ArrayList em um programa que eu estou desenvolvendo. Para fins de teste eu criei isso realmente pequeno exemplo que ainda tem o mesmo problema. Eu já tentei chaves primárias diferentes, mas as persistir problemas.
Todas as idéias ou sugestões?
classe 1-Employee
@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();
}
}
}
Solução
A classe Employee não tinha = destacáveis ??"verdadeiro".
Você deve alterar
@PersistenceCapable(identityType = IdentityType.APPLICATION)
para
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
Outras dicas
É significativo que em addEmployee
, você obter o PersistenceManager assim:
PersistenceManager pm = PMF.get().getPersistenceManager();
mas em GetEmployees você chamá-lo assim
PersistenceManager pm = getPersistenceManager();
sem usar PMF.get()
.
Eu mudei o código um pouco, e tudo está normal agora, ainda não sei o que causou este problema.
Eu estou usando listas de agora, em vez das coleções ** (1) , eu voltar tudo como uma matriz simples através do RPC (2) ** e eu mudei a maneira que eu fiz a consulta ** (3) **.
query.execute (1) resultados list = (List) ();
(2) retorno (Employee []) employees.toArray (new Employee [0]);