我有一个像这样的抽象类:
public abstract class NotificationParent {
@SerializedName(SerCons.C_NOTIFICATION_ID) private int notificationId;
@SerializedName(SerCons.C_ID) private int id;
@SerializedName(SerCons.C_DATE) private long date;
...
}
和两个从所提到的抽象类继承的类:
public class NotifNewRingTone extends NotificationParent {
@SerializedName(SerCons.C_GAME_ID) private int rtId;
@SerializedName(SerCons.C_GAME_NAME) private String rtName;
..
}
public class NotifNewWallpaper extends NotificationParent {
@SerializedName(SerCons.C_GAME_ID) private int wpId;
@SerializedName(SerCons.C_GAME_NAME) private String wpName;
...
}
我想在数据库中制作3个表:notifications
,wallpaper_notification
,ringtone_notifications
。
但是,当我想从表格中选择(加入)以获取所有通知(墙纸和铃声)时,我不知道该怎么办。
我想要这样的东西:
@Query("select * from notifications n left join ringtone_notifications r on n.notif_id = r.notif_id left join wallpaper_notifications w on n.notif_id = w.notif_id) public NotificationParent getAllNotifications();
但是它只会给我NotificationParent类包含的字段。不是子类的字段。 另外,我希望查询准备好实现PagedList体系结构。
即使我必须更改类的设计,也请给出您的建议。
答案 0 :(得分:1)
您的选择查询看起来正确。但是您的方法不正确。
public NotificationParent getAllNotifications();
这意味着您想返回具有Notification父级的字段。您需要创建另一个类,例如:
public class MyObject {
private int notificationId;
private int id;
private long date;
private int rtId;
private String rtName;
private int wpId;
private String wpName;
}
并将表中的所有内容放入其中。如果您不希望所有内容都需要修改选择内容*您可以输入
Select notifications.date, ringtone_notifications.rtName
您的对象将是这样的:
public class MyObject {
private long date;
private String rtName;
}