web-dev-qa-db-fra.com

Comment annoter une valeur par défaut dans une entité de pièce Android?

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;

}
16
Rüdiger

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;

}
9
AliSh

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;
}

}

3
Patel Jaimin

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é.

0
Amr Berag