Android Room-更改嵌套对象模型时如何迁移?

时间:2019-05-12 06:35:49

标签: android sql type-conversion android-room

我有一个使用Android Room,Dao和Entity类设置为POJO的数据库架构。除了POJO实体不是那么“简单”,它实际上持有对另一个对象的引用。我当时认为这是个好主意,因为它使我可以更灵活地更改对象并在应用程序的其他位置使用它,并仅根据需要保存到数据库。

我现在面临的问题是the migration guideline仅提到如何通过更改SQL来迁移数据库,但是我更改了对象本身。我的typeconverter类仅将对象与字符串进行转换。

因为它被保存为长字符串,所以我必须在SQL中做一个简单的REPLACE(string, old_string, new_string) 迁移代码块,其中更新的对象是新字符串。在迁移块中运行replace SQL命令之前,如何检索旧对象并更新值?

更新:我在typeconverter类中使用GSON将对象更改为字符串,因此想到的解决方案是简单地下载旧对象并使用添加的字段。唯一的问题是您无法访问数据库并下载json,将其转换为对象,添加新的数据字段,然后再转换为新的json字符串。

我很幸运,我还没有达到规模,因为对于许多用户而言,这将是一件棘手的事情。 (因此,我建议任何阅读此内容的人都不要做我想做的事,而是实现对象嵌套。在更新要保存的数据时,将Entry对象转换为其他可移植对象比嵌套更容易。)

我认为,如果您已经做过我不能做的事情,那么最好的选择就是简单地创建一个新的可移植对象,并为该对象创建新的typeconverter函数,然后为新对象添加SQL COLUMN。然后问题就出在如何从Entry Dao中检索那些对象,这将导致编写更多代码,并且如果执行不当,将可能导致错误调试。

长话短说,如果有人正在阅读本文,请不要在Android的Room DB中嵌套对象,除非您100%确信这是模型的最终形式...但是总有这样的事情吗?

0 个答案:

没有答案