Как аннотировать значение по умолчанию внутри объекта класса Android?
Я не смог найти никакой информации о том, как аннотировать значение SQL - DEFAULT, просматривая документы @ColumnInfo для новой библиотеки Android Persistence.
Предоставляет ли Room аннотацию для значений по умолчанию?
Мое текущее решение было бы вручную создать соответствующую таблицу...
CREATE TABLE MyTable (
...
MyDefaultValuedCol TEXT DEFAULT 'Default Value',
MyDefaultFlagCol INT DEFAULT 1
)
... и поставить комнату на вершине.
@Entity(tableName = "MyTable")
class MyClass {
...
public String MyDefaultValuedCol;
public boolean MyDefaultFlagCol;
}
Ответы
Ответ 1
В комнате нет аннотации для значения по умолчанию, но вы можете установить значение по умолчанию в своей сущности следующим образом:
@Entity(tableName = "MyTable")
class MyClass {
...
public String MyDefaultValuedCol = "defaultString";
public boolean MyDefaultFlagCol = true;
}
Ответ 2
Вы можете проверить внутри вашего метода получения Entity и установить там некоторое значение по умолчанию.
@Entity(tableName = "Dashboard")
public class Dashboard {
@PrimaryKey
@NonNull
@ColumnInfo(name = "claimNumber")
private String claimNumber;
private String percentage = "0";
private String imagePath = "";
@NonNull
public String getClaimNumber() {
return claimNumber;
}
public void setClaimNumber(@NonNull String claimNumber) {
this.claimNumber = claimNumber;
}
public String getPercentage() {
if (percentage == null || percentage.isEmpty()) {
return "0";
}
return percentage;
}
public void setPercentage(String percentage) {
this.percentage = percentage;
}
public String getImagePath() {
return imagePath;
}
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
public Dashboard(@NonNull String claimNumber, String percentage, String imagePath) {
this.claimNumber = claimNumber;
this.percentage = percentage;
this.imagePath = imagePath;
}
}
Ответ 3
Для любого, кто сталкивается с ситуацией, когда у вас есть два внешних ключа и "onDelete = CASCADE", вы можете установить внешний ключ для типа данных, который может быть установлен в null, например:
int parent1Id = 0;
int parent2Id = 0;
//should be:
Long parent1Id = null;
Long parent2Id = null;
таким образом, БД знает, что конкретный объект/строка не имеет другого родителя другого типа при попытке удалить его, когда его родитель удаляется.
Ответ 4
С выпуском комнаты постоянства 2.2.0 к аннотации @ColumnInfo добавлено новое свойство, которое можно использовать для указания значения столбца по умолчанию.
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Long,
@ColumnInfo(name = "user_name", defaultValue = "temp") val name: String
)