Je n'ai trouvé aucune information sur la façon d'annoter une valeur SQL - "DEFAULT" lors de la recherche dans les documents @ ColumnInfo pour la nouvelle Android Persistence Library.
Est-ce que Room fournit même une annotation pour les valeurs par défaut?
Ma solution actuelle serait de créer manuellement le tableau correspondant ...
CREATE TABLE MyTable (
...
MyDefaultValuedCol TEXT DEFAULT 'Default Value',
MyDefaultFlagCol INT DEFAULT 1
)
... et placez la pièce au-dessus.
@Entity(tableName = "MyTable")
class MyClass {
...
public String MyDefaultValuedCol;
public boolean MyDefaultFlagCol;
}
La pièce n'a aucune annotation pour la valeur par défaut, mais vous pouvez définir la valeur par défaut dans votre entité comme ceci:
@Entity(tableName = "MyTable")
class MyClass {
...
public String MyDefaultValuedCol = "defaultString";
public boolean MyDefaultFlagCol = true;
}
Vous pouvez vérifier à l'intérieur de votre méthode getter d'entité et y définir une valeur par défaut.
@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;
}
}
Pour toute personne confrontée à la situation lorsque vous avez deux clés étrangères et "onDelete = CASCADE", vous pouvez définir la clé étrangère sur un type de données qui peut être défini sur null par exemple:
int parent1Id = 0;
int parent2Id = 0;
//should be:
Long parent1Id = null;
Long parent2Id = null;
de cette façon, la base de données sait qu'un objet/ligne particulier n'a pas d'autre parent de type différent lorsqu'elle tente de le supprimer lorsque son parent est supprimé.