我的应用程序有字符串ID的所有实体(服务器端)我想从Hive迁移到Isar,所以我正在阅读Isar documentation,并发现它不支持String
ID(只有int
),是的,我知道我可以创建这样的类:
@Collection()
class Student {
int? id;
@Index(unique: true)
String? myServerId;
late String name;
final teacher = IsarLink<Teacher>();
}
当我获取数据时(JSON)从服务器返回id
字段(Isar的经理)不是来自服务器,因此我将此记录保存在本地Isar将创建ID
确定,下次我从服务器获取相同记录时,需要通过myServerId
进行检查,如果存在,只需使用Isar创建的id
进行更新,这很简单,我如何能管理它与所有实体字段一样teacher
?需要检查每个实体的孩子或有一个更好的方法?提前感谢
2条答案
按热度按时间nhn9ugyo1#
将
replace
设置为myServerId
的@Index
中的true
,如下所示:检查此Isar替换索引文档。
t1rydlwq2#
在项目中导入Dart语言的FNV哈希算法。
FNV(Fowler-Noll-Vo)散列函数是Isar数据库作者推荐的64位快速散列算法。
由于Id属性是必需的,我们将通过向其传递字符串id,将Id属性设置为使用算法生成的64位。
首先将包导入到集合类。
然后定义Id属性,如下所示:
并保留您的String id以及一个单独的属性。
整个集合类将如下所示: