鉴于以下类别和关系,我需要一个 RealmResults< Model1> 满足以下要求:
型号1
int id
RealmList<Model2>
模型2
int id
int model1Fk
int type
RealmList<Model3>
Model3
int model2Fk
我想查询所有Model1实体,对于特定的Model2相关实例类型,Model2实例至少有一个与Model3相关的实例。
在SQL中(尚未测试):
select distinct model1.*
from Model1 model1 join Model2 model2 on model2.model1Fk = model1.id join Model3 model3 on model3.model2Fk = model2.id
where model2.type = 'Some Type'
答案 0 :(得分:0)
这些模型是存储在Android中的SQLite数据库中还是纯Java对象?
如果它们是本机对象,那么您可以直接引用它们。 例如
class Model1 {
int id;
RealmList<Model2> list;
}
class Model2 {
int id;
int type;
Model1 parent;
}
您甚至可以构建一个可以为您完成所有这些操作的哈希映射。根据Android中这些对象的存在方式,可以制定策略。
答案 1 :(得分:0)
您的文字说明和加入不符合,但如果您希望查找Model1
Model2
Some type
的所有realm.where(Model1.class).equalTo("model2List.type", "Some Type").findAll();
,则可以执行以下操作:
Model1
您可以在此处阅读有关链接查询的信息:https://realm.io/docs/java/latest/#link-queries。
如果您要查找至少有一个Model2
并且至少有一个Model3
具有某个值的所有realm.where(Model1.class).equalTo("model2List.Model3List.model2Fk", "some model2Fk value").findAll();
,您可以执行以下操作:
public EventListStatus eventListParser(String response) {
String msg = null;
String status = null;
EventListStatus eventListStatus = new EventListStatus();
ArrayList<EventList> eventLists = new ArrayList<EventList>();
eventLists.clear();
try {
JSONObject jo = new JSONObject(response);
status = jo.getString("status");
msg = jo.getString("msg");
eventListStatus.setErrorCode(jo.getString("errorCode"));
eventListStatus.setErroDesc(jo.getString("errorDesc"));
eventListStatus.setMsg(msg);
eventListStatus.setMsg(status);
if(msg != null && msg.equalsIgnoreCase("success"))
{
JSONArray ja = new JSONArray(jo.getString("data"));
for(int j=0;j<ja.length();j++){
JSONObject jo1 = new JSONObject(ja.getString(j));
EventList el = new EventList();
el.setID(jo1.getString("ID"));
el.setPost_title(jo1.getString("post_title"));
el.setPost_date(jo1.getString("post_date"));
el.setDescription(jo1.getString("description"));
el.setPost_content(jo1.getString("post_content"));
el.setGuid(jo1.getString("guid"));
el.setStart_date(jo1.getString("start_date"));
el.setEnd_date(jo1.getString("end_date"));
el.setLocation(jo1.getString("location"));
el.setGeo_location(jo1.getString("geo_location"));
el.setLatitude(jo1.getString("latitude"));
el.setLongitude(jo1.getString("longitude"));
el.setPhone(jo1.getString("phone"));
el.setStime(jo1.getString("stime"));
el.setEtime(jo1.getString("etime"));
el.setVenue(jo1.getString("venue"));
eventLists.add(el);
}
eventListStatus.setEventLists(eventLists);
}
} catch (JSONException e) {
e.printStackTrace();
}
return eventListStatus;
}