gwt+jdo+arraylist

fdx2calv  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(411)

我正在开发的程序中有一个空数组列表。出于测试目的,我创建了这个仍然存在相同问题的非常小的示例。我已经尝试了不同的主键,但问题仍然存在。
有什么想法或建议吗?
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();
        }
    }
}
gcxthw6b

gcxthw6b1#

我改变了一点代码,现在一切正常,但我仍然不知道是什么导致了这个问题。
我现在使用的是列表而不是集合**(1),我通过rpc(2)以简单数组的形式返回所有内容,并且我改变了查询(3)**的方式。
(1) list results=(list)query.execute();
(2) return(employee[])employees.toarray(new employee[0]);
(3) query=pm.newquery(employee.class);

zour9fqk

zour9fqk2#

您的employee类没有detachable=“true”。
你应该改变

@PersistenceCapable(identityType = IdentityType.APPLICATION)

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

cunj1qz13#

这有意义吗 addEmployee ,将获得persistencemanager,如下所示:

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

但在getemployees你这样称呼它

PersistenceManager pm = getPersistenceManager();

不使用 PMF.get() .

相关问题