gwt + jdo + arraylist
-
12-09-2019 - |
문제
개발중인 프로그램에서 Null Arraylist를 받고 있습니다. 테스트 목적으로 여전히 같은 문제가있는이 작은 예제를 만들었습니다. 이미 다른 기본 키를 시도했지만 문제는 지속됩니다.
아이디어 나 제안이 있습니까?
1 명의 직원 클래스
@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 고용인 서비스
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();
}
}
}
해결책
직원 수업에는 분리 가능 = "true"가 없습니다.
당신은 변경해야합니다
@PersistenceCapable(identityType = IdentityType.APPLICATION)
에게
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
다른 팁
그것이 중요합니까? addEmployee
, 당신은 다음과 같은 peristencemanager를 얻습니다.
PersistenceManager pm = PMF.get().getPersistenceManager();
그러나 Getemployees에서는 이렇게 부릅니다
PersistenceManager pm = getPersistenceManager();
사용하지 않고 PMF.get()
.
나는 코드를 조금 바꾸었고 지금은 모든 것이 정상입니다. 여전히이 문제를 일으킨 원인을 모릅니다.
지금은 컬렉션 대신 목록을 사용하고 있습니다 ** (1), 나는 RPC를 간단한 배열로 반환합니다.(2) ** 그리고 나는 query ** (3) **을 수행하는 방식을 변경했습니다.
(1) 목록 결과 = (list) query.execute ();
(2) 귀환 (직원 []) 직원 .ToArray (신입 사원 [0]);
(3) query query = pm.newquery (Employee.class);
제휴하지 않습니다 StackOverflow