У меня есть следующие объекты:
@Entity(indices = {@Index("address")},
foreignKeys = @ForeignKey(
entity = Address.class,
parentColumns = "address",
childColumns = "address",
onUpdate = CASCADE,
onDelete = SET_DEFAULT))
public class Human {
@PrimaryKey(autoGenerate = true)
public long id;
@NonNull
public String name;
@NonNull
public String address;
}
@Entity
public class Address {
@PrimaryKey
@NonNull
public String address;
public int someInt;
}
Я добавляю «людей» с разными адресами, которые позже пытаюсь удалить или изменить, используя:
@Insert(onConflict = REPLACE)
void add(Human human);
Параметры, которые я вижу ипроблемы с ними:
У меня есть список адресов, один из которых «по умолчанию».Когда я удаляю адрес, я бы хотел, чтобы «Люди», находящиеся на удаленном адресе, «переместились» в «по умолчанию».Я использовал:
@Query("delete from Address where address = :address")
void deleteAddress(String address);
, так что onDelete = SET_DEFAULT, похоже, не работает так, как я себе представлял, если я установил значение по умолчанию для адреса в Human Entity.
Этов настоящее время происходит сбой с: Сбой ограничения NOT NULL.
Альтернативой удалению может быть изменение адреса и установка его в значение «по умолчанию» и, таким образом, слияние с существующей записью «по умолчанию».Я попытался:
@Query("update Address SET address = :address WHERE address = :addressToEdit")
void editAddress(String addressToEdit, String newAddress);
В настоящее время это не удается с: Не удалось выполнить ограничение UNIQUE. , поскольку, очевидно, уже есть адрес с таким именем.
Установка адреса @Nullable в обеих сущностях.Таким образом, адрес «по умолчанию» является нулевым.Это добавляет дополнительную сложность моему решению (не хотелось бы), и кажется, что я не могу запросить людей с пустым адресом, используя следующий код, потому что он ничего не возвращает.
@Query("select * from Human where address = :address")
LiveData<List<Human>> getHumans(String address);
Как мне установить этот параметр по умолчанию для удаленного адреса (внешнего ключа)?