Я хотел бы знать, как предотвратить дублирование вставок при вызове RPC от клиента Android, подключенного к движку приложения. Ниже мой код и то, что я пытался в фоновом режиме, но когда я это делаю, я получаю "Внутреннюю ошибку сервера".
public void createentity(userentity e) {
PersistenceManager pm = PMF.get().getPersistenceManager();
//to go through the records and and check for duplicates
Query q = pm.newQuery("select from" + userentity.class + "where Country=='" + e.getCCNumber() + "'");
List < userentity > s = (List < userentity > ) q.execute();
//if the size is equal to to null means there is no duplicate
if (s.size() == 0) {
//insert the value
try {
pm.makePersistent(e);
} finally {
pm.close();
}
}
}
Несколько потенциальных проблем, которые я вижу. Сначала вы также должны проверить, что ваш список не равен нулю. Если он равен нулю, ваша попытка получить доступ к размеру приведет к исключению нулевого указателя. Во-вторых, в вашей строке запроса удалите double equals. Тебе нужны только одиночные равные. А во-вторых, добавьте пробелы в конец и начинания ваших строковых литералов. Вы создаете недопустимую строку. Например, "выберите из". И, наконец, вам не нужно обертывать e.getCCNumber() в строковых литералах.
Query q = pm.newQuery("select from " + userentity.class + " where Country= " + e.getCCNumber());