我试图在Android中创建一个与SQL Server中的一个相同的Realm数据库。我们的想法是定期更新Android上的那个,以便两者都有相同的数据。
为了简单起见,我们假设我有三个表:对象,颜色,形状。我的主表Object具有以下形式:
ID | int
------------------
Name | string
------------------
IDColor | int
------------------
IDShape | int
其中IDColor和IDShape引用颜色和形状表。这两者的内容并不重要。
我想做的是在Android上定义类似的内容:
public class MyObject extends RealmObject {
@Required
private String name;
private Color color;
private Shape shape;
}
这样我可以直接引用MyObject.color和MyObject.shape。但是,这样AFAIK我不能通过ID来指定颜色和形状,因此realm.copyToRealmOrUpdate不会起作用。
是否有替代方案允许我直接导入我的JSON(理想)或经过一些预处理或后处理?
由于
编辑:我找到了一种使用Xamarin做类似事情的方法。请参阅下面的答案。
答案 0 :(得分:1)
Realm是一个对象数据库,因此在这种情况下,独立导入3个表并不能真正起作用。您需要进行一些设置对象结构的预处理。
您可以通过将输入数据转换为JSONObject并使用realm.createOrUpdateFromJsonObject()
方法来完成此操作。这与copyToRealmOrUpdate
的行为类似,但它直接适用于JSON。
伪代码:
JSONObject obj = new JSONObject(myObjectJson);
obj.put("color", getColorJson(obj.getInt("IDColor")));
realm.creteOrUpdateFromJSonObject(obj);
答案 1 :(得分:1)
我不再使用“vanilla Android”,但我发现可以按照我在Xamarin的原始问题做我想要的事情,如下所示:
{{1}}
Realm会忽略任何自定义getter和setter,因此对象不会保留在数据库中。这是我发现在Realm中复制传统SQL数据库的FK行为的最简单方法。