微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果有null,

如何解决如果有null,

我最近开始使用Room,我想知道在插入或更新实体时是否有任何方法可以检查该值是否为null,在这种情况下,请勿将其插入/update。

我想做的是类似的事情

@Entity
data class Person{
    @PrimaryKey
    val id: Int,val name:String
    val surname:String
 }

是否可以通过简单的方式对不为null的那些字段执行@Update操作?而那些不为null的则保持原样?

例如,在一个更新中,我可能已经通知了ID和名称,但是在另一个更新中,我可能已经通知了ID和姓氏。因此,我想要的是合并信息,但是如果可能的话,不必进行选择查询来检查存储的值。

我已经读过following post,但我的疑问是,是否可以定义一个@Entity,将所有字段定义为我之前提到的字段,然后让其他实体进行更新一些字段,例如:

 @Entity(tableName = "person")
data class PersonUpdateSurname{
    @PrimaryKey
    val id: Int,val name:String
 }


@Entity(tableName = "person")
data class PersonUpdateSurname{
    @PrimaryKey
    val id: Int,val surname:String
 }

有没有办法告诉Room原始的表结构是什么?

解决方法

有没有办法告诉Room原始的表结构是什么?

这个问题不清楚。也许您有一些误会。

尝试遵循下一个模式:

  1. 应该只有一个与Person相关的带有房间注释的数据类-@ Entity,@ PrimaryKey等。您的情况是Person类。
  2. 其余所有提到的辅助类应该只是POJO(纯数据类),因为它们没有被持久化。就您而言-PersonNamePersoneSurname(带有您描述的字段,但没有Room的注释)。
  3. 在DAO中,在@Update中使用entity-参数:
@Update(entity = Person::class)
fun updateName(personName: PersonName)

@Update(entity = Person::class)
fun updateSurname(personeSurname: PersonSurname)

在您的存储库调用方法中,您需要什么。如果只想更新名称,请使用方法updateName()PersonName类的实例作为参数,而仅要更新姓氏,请使用方法updateSurname()和类PersonSurname的实例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。