按 ID 引用 Realm.io 个 FK 对象
Referring to Realm.io FK objects by ID
我正在尝试在 Android 中创建一个 Realm 数据库,它反映了我在 SQL 服务器中拥有的数据库。这个想法是定期更新 Android 上的那个,以便两者具有相同的数据。
为简单起见,假设我有三个 table:对象、颜色、形状。我的主要 table 对象具有这种形式:
ID | int
------------------
Name | string
------------------
IDColor | int
------------------
IDShape | int
其中 IDColor 和 IDShape 指的是颜色和形状 table。这两个内容不重要
我想做的是在Android上定义这样的东西:
public class MyObject extends RealmObject {
@Required
private String name;
private Color color;
private Shape shape;
}
这样我就可以直接引用MyObject.color和MyObject.shape了。但是,据我所知,这样我无法通过 ID 指定颜色和形状,因此 realm.copyToRealmOrUpdate 将不起作用。
是否有替代方案允许我直接(理想)或在一些预处理或 post 处理后导入我的 JSON?
谢谢
编辑:我找到了一种使用 Xamarin 执行类似操作的方法。 请参阅下面的答案。
Realm 是一个对象数据库,因此在这种情况下,独立导入 3 个表实际上行不通。您需要进行一些预处理来设置对象结构。
您可以通过将输入数据转换为 JSONObject 并使用 realm.createOrUpdateFromJsonObject()
方法来实现。它的行为类似于 copyToRealmOrUpdate
除了它直接作用于 JSON.
伪代码:
JSONObject obj = new JSONObject(myObjectJson);
obj.put("color", getColorJson(obj.getInt("IDColor")));
realm.creteOrUpdateFromJSonObject(obj);
我不再使用 "vanilla Android",但我发现在 Xamarin 中可以按照我原来的问题做我想做的事情,如下所示:
public class MyObject: RealmObject
{
public int IdColor {get; set;}
public Color color
{
get
{
return realm.All<Color>().FirstOrDefault(x => x.Id == IdColor);
}
set
{
IdColor = value.Id;
}
}
}
Realm 会忽略任何自定义的 getter 和 setter,因此对象不会持久保存在数据库中。这是我发现在 Realm 中复制传统 SQL 数据库的 FK 行为的最简单方法。
我正在尝试在 Android 中创建一个 Realm 数据库,它反映了我在 SQL 服务器中拥有的数据库。这个想法是定期更新 Android 上的那个,以便两者具有相同的数据。
为简单起见,假设我有三个 table:对象、颜色、形状。我的主要 table 对象具有这种形式:
ID | int
------------------
Name | string
------------------
IDColor | int
------------------
IDShape | int
其中 IDColor 和 IDShape 指的是颜色和形状 table。这两个内容不重要
我想做的是在Android上定义这样的东西:
public class MyObject extends RealmObject {
@Required
private String name;
private Color color;
private Shape shape;
}
这样我就可以直接引用MyObject.color和MyObject.shape了。但是,据我所知,这样我无法通过 ID 指定颜色和形状,因此 realm.copyToRealmOrUpdate 将不起作用。
是否有替代方案允许我直接(理想)或在一些预处理或 post 处理后导入我的 JSON?
谢谢
编辑:我找到了一种使用 Xamarin 执行类似操作的方法。 请参阅下面的答案。
Realm 是一个对象数据库,因此在这种情况下,独立导入 3 个表实际上行不通。您需要进行一些预处理来设置对象结构。
您可以通过将输入数据转换为 JSONObject 并使用 realm.createOrUpdateFromJsonObject()
方法来实现。它的行为类似于 copyToRealmOrUpdate
除了它直接作用于 JSON.
伪代码:
JSONObject obj = new JSONObject(myObjectJson);
obj.put("color", getColorJson(obj.getInt("IDColor")));
realm.creteOrUpdateFromJSonObject(obj);
我不再使用 "vanilla Android",但我发现在 Xamarin 中可以按照我原来的问题做我想做的事情,如下所示:
public class MyObject: RealmObject
{
public int IdColor {get; set;}
public Color color
{
get
{
return realm.All<Color>().FirstOrDefault(x => x.Id == IdColor);
}
set
{
IdColor = value.Id;
}
}
}
Realm 会忽略任何自定义的 getter 和 setter,因此对象不会持久保存在数据库中。这是我发现在 Realm 中复制传统 SQL 数据库的 FK 行为的最简单方法。