如何在android房间实体内注释默认值?

如何在android房间实体内注释默认值?,android,android-room,Android,Android Room,在查看新Android持久性库的文档时,我找不到如何注释SQL“DEFAULT”值的任何信息 房间是否为默认值提供注释 我目前的解决方案是手动创建相应的表 CREATE TABLE MyTable ( ... MyDefaultValuedCol TEXT DEFAULT 'Default Value', MyDefaultFlagCol INT DEFAULT 1 ) 。。。把房间放在上面 @Entity(tableName = "MyTable") class MyC

在查看新Android持久性库的文档时,我找不到如何注释SQL“DEFAULT”值的任何信息

房间是否为默认值提供注释

我目前的解决方案是手动创建相应的表

CREATE TABLE MyTable (
  ...
  MyDefaultValuedCol  TEXT DEFAULT 'Default Value',
  MyDefaultFlagCol    INT  DEFAULT 1
)
。。。把房间放在上面

@Entity(tableName = "MyTable")
class MyClass {
    ...

    public String MyDefaultValuedCol;

    public boolean MyDefaultFlagCol;

}

房间没有默认值的任何注释,但您可以在实体中设置默认值,如下所示:

@Entity(tableName = "MyTable")
class MyClass {
    ...

    public String MyDefaultValuedCol = "defaultString";

    public boolean MyDefaultFlagCol = true;

}

您可以检查实体的getter方法内部,并在那里设置一些默认值

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

}

对于任何一个有两个外键且“onDelete=CASCADE”的用户,可以将外键设置为可以设置为null的数据类型 例如:

int parent1Id = 0;
int parent2Id = 0;  
//should be:
Long parent1Id = null;
Long parent2Id = null;

通过这种方式,DB知道在删除某个特定对象/行的父对象/行时,该对象/行没有其他不同类型的父对象/行。

随着room persistence 2.2.0的发布,在@ColumnInfo注释中添加了一个新属性,可用于指定列的默认值。看


您可以使用
@ColumnInfo
注释设置默认值-

@ColumnInfo(defaultValue = "No name")
public String name;

或任何类型的数据类型
检查此处的引用

请记住,这不会修改生成的SQLite表创建以放入默认值。当您直接执行语句时(例如仅更新某些字段时),这没有帮助。我们需要能够在SQL中生成默认值。将数值表示为数据类型
字符串
有什么意义?将数值表示为字符串没有意义。我只是给你举个例子@MartinZeitlerWhy not
Integer
then?因为插入将返回一个长id,所以最好使用Longthanks来说明这一点。但是我们可以将布尔值(真/假)设置为默认值。我试过了,但我犯了错误@ColumnInfo(name=“is_deleted”,defaultValue=false)var is_deleted:Boolean,布尔文本不符合预期类型String@Qadir,虽然我还没试过,但我相信房间里把布尔人当作int来储存。假设是这种情况,根据,您应该能够对false执行defaultValue=“0”。请注意,如果您仅使用/@insert插入实体,则不会使用您在此处指定的默认值。在这种情况下,将使用Java/Kotlin中分配的任何值。将/@Query与INSERT语句一起使用,并跳过该列以使用此默认值。
@ColumnInfo(defaultValue = "No name")
public String name;
@ColumnInfo(defaultValue = "0")
public int flag;