سؤال

أحصل على قائمة صفيف فارغة في برنامج أتطور. لأغراض الاختبار، قمت بإنشاء هذا المثال الصغير حقا لا يزال لديه نفس المشكلة. لقد جربت بالفعل مفاتيح أساسية مختلفة، لكن المشكلة تستمر.

أي أفكار أو اقتراحات؟

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();
        }
    }
}
هل كانت مفيدة؟

المحلول

فئة الموظف الخاصة بك لم يكن لديك فصل = "صحيح".

يجب أن تتغير

@PersistenceCapable(identityType = IdentityType.APPLICATION)

ل

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

نصائح أخرى

هل هو مهم في addEmployee, ، يمكنك الحصول على persistencemanager مثل هذا:

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

ولكن في getemployees تسميها مثل هذا

PersistenceManager pm = getPersistenceManager();

دون استخدام PMF.get().

لقد غيرت الرمز قليلا، وكل شيء طبيعي الآن، لا يزال لا أعرف ما الذي تسبب في هذه المشكلة.

أنا أستخدم قوائم الآن بدلا من المجموعات ** (1), ، أعيد كل شيء كصفيف بسيط من خلال RPC(2) ** وأغيرت الطريقة التي قمت بها الاستعلام ** (3) **.

(1) قائمة النتائج = (قائمة) الاستعلام. execute ()؛

(2) عودة (الموظف []) الموظفين. النوع (موظف جديد [0])؛

(3) استعلام الاستعلام = PM.NewQuery (الموظف.كلاس)؛

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top