【问题标题】:GWT + JDO + ArrayListGWT + JDO + ArrayList
【发布时间】:2010-12-12 08:36:30
【问题描述】:

我正在开发的程序中得到一个 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-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();
        }
    }
}

【问题讨论】:

    标签: java google-app-engine gwt arraylist jdo


    【解决方案1】:

    您的 Employee 类没有 detachable = "true"。

    你应该改变

    @PersistenceCapable(identityType = IdentityType.APPLICATION)
    

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

    【讨论】:

      【解决方案2】:

      addEmployee 中,您像这样获得persistenceManager 是否重要:

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

      但是在 getEmployees 你这样称呼它

      PersistenceManager pm = getPersistenceManager();
      

      不使用PMF.get()

      【讨论】:

      • 感谢您的建议。不,这并不重要。这只是一个复制粘贴错误。但它完全一样。反正我改了,问题依旧。
      【解决方案3】:

      我稍微改了一下代码,现在一切正常了,还是不知道是什么原因造成的。

      我现在使用列表而不是集合**(1),我通过 RPC 将所有内容作为简单数组返回(2)**,并且我更改了查询方式**(3)**.

      (1) 列出结果 = (List) query.execute();

      (2) return (Employee[]) employees.toArray(new Employee[0]);

      (3) 查询查询 = pm.newQuery(Employee.class);

      【讨论】:

        猜你喜欢
        • 2010-11-02
        • 1970-01-01
        • 2011-01-12
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        • 2013-02-03
        • 2013-02-20
        • 1970-01-01
        相关资源
        最近更新 更多