如何在android房间实体内注释默认值?
在查看新Android持久性库的文档时,我找不到如何注释SQL“DEFAULT”值的任何信息 房间是否为默认值提供注释 我目前的解决方案是手动创建相应的表如何在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
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 notInteger
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;