Еще два обходных пути в дополнение к ответу Боба Снайдера (но они должны быть тщательно протестированы):
- Чтобы «имитировать» TypeConverter (из списка в строку) самостоятельно (это непростая вещь , На практике не пробовал!):
В DAO измените тип possibleList на String:
@Query("UPDATE parcel_table SET possibleDeliveryPersonsList = :possibleList WHERE id = :tid")
void updatePossibleDeliveryPersonsList(String possibleList, int tid);
добавьте вспомогательный метод для преобразование (вы также можете разместить его в DAO):
void updatePossibleDeliveryPersonsList(List<String> possibleList, int tid) {
String listToString = TextUtils.join(", ", possibleList);
// copied from your converter, it could be put in some common function to follow DRY
updatePossibleDeliveryPersonsList(listToString, tid);
}
и вызвать его из репозитория / ViewModel:
db.ParcelDao().updatePossibleDeliveryPersonsList(possibleList, tid);
Чтобы заменить несколько ваших методов updateXXX в DAO одним обновлением (у вас много полей в таблице, может быть, лучше попробовать какой-нибудь универсальный способ обновить любые их комбинации?):
@Update
void update(Parcel parcel);
Добавьте в свой DAO метод поиска посылки по id:
@Query("SELECT * from parcel_table where id = :id")
Parcel getParcel(int id);
И в вашем репозитории / ViewModel сначала получите Parcel, затем измените его (статус, имя как угодно), а затем обновите база данных:
Parcel parcel = db.ParcelDao().getParcel(id); // let's say it can't be null
parcel.shippingDate = yourShippingDate; // or change here any of your other fields, including list
db.ParcelDao().update(parcel);