繁体   English   中英

android 机房。 如何获取查询返回的列没有字段的数据 class

[英]android Room. how can I get the data class with columns returned by the query does not have the fields

我想从查询中获取我的数据 class属性isActivated具有默认值false

这是目标实体

@Entity(tableName = "MY_ENTITY")
data class MyEntity(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "A") val a: Long = 0,
    @ColumnInfo(name = "B") val b: String
)

这是我想从查询中获取的数据 class

data class MyDataClass(
    @ColumnInfo(name = "A") val a: Long,
    @ColumnInfo(name = "B") val b: String,

    var isActivated: Boolean = false              // this is the problem I want to solve
)

这是房间道中的查询

@Query(SELECT A, B FROM MY_ENTITY)
fun getEntity(): List<MyDataClass>

属性isActivated在普通数据 class 不在房间实体数据 class 中

错误信息在这里

error: The columns returned by the query does not have the fields [isActivated] in MyDataClass
even though they are annotated as non-null or primitive. Columns returned by the query: [A, B]
public abstract java.lang.Object loadAllGroupVOs(@org.jetbrains.annotations.NotNull()

我自己解决了这个问题,但我不知道这是个好主意。

我改变了我的查询,如下所示

@Query(SELECT A, B FROM MY_ENTITY)
fun getEntity(): List<MyDataClass>

@Query(SELECT A, B, 0 as IS_ACTIVATED FROM MY_ENTITY)
fun getEntity(): List<MyDataClass>

而数据class也变成了这样。

data class MyDataClass(
  @ColumnInfo(name = "A") val a: Long,
  @ColumnInfo(name = "B") val b: String,
    
  var isActivated: Boolean = false              // this is the problem I want to solve
)

data class MyDataClass(
    @ColumnInfo(name = "A") val a: Long,
    @ColumnInfo(name = "B") val b: String,

    @ColumnInfo(name = IS_ACTIVATED) var isActivated: Boolean = false
)

如果您不想像这样使用它,可以将 @Ignore 用于 isActivated:

data class MyDataClass(
  @ColumnInfo(name = "A") val a: Long,
  @ColumnInfo(name = "B") val b: String,
    
  @Ignore
  var isActivated: Boolean = false             
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM