質問

私は私が開発していたプログラムでのNULLのArrayListを取得しています。テストの目的のために、私はまだ同じ問題を抱えているこれは本当に小さな例を作成しました。私はすでにdiferent主キーを試してみましたが、問題が解決します。

任意のアイデアや提案?

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();
        }
    }
}
役に立ちましたか?

解決

あなたのEmployeeクラスは取り外し可能= "true" を持っていませんでした。

あなたは変更する必要があります。

@PersistenceCapable(identityType = IdentityType.APPLICATION)

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

他のヒント

addEmployeeに、あなたはこのようなのPersistenceManagerを得ることも重要です。

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

しかし、あなたは

このようにそれを呼び出すのGetEmployeesで
PersistenceManager pm = getPersistenceManager();

PMF.get()を使用しない。

まだ私はこの問題の原因となったかわからない、私は、コードを少し変更し、すべてが今正常です。

私は(2)**単純な配列は、<強い/> RPCを谷として**(1)の、私はすべてを返す代わりに、コレクションの今リストを使用していると私は、私は、クエリをした方法を変更しました**(3)**

(1)のリスト結果=(リスト)query.execute();

(2)のリターン(従業員[])employees.toArray(新入社員[0]);

(3)のクエリのクエリ= pm.newQuery(Employee.class);

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top