我的问题: 我正在努力消除Room DAO中以下Room @Query语句的编译错误。如您所见,SQLite查询语句正在连接来自不同表的各个字段。错误所标识的缺失字段是该方法的列表类型中所标识的Notes类构造函数的一部分。我想我需要更改所标识的列表类型。如果我是对的,我需要一些有关如何解决该问题的指导/建议。我是否只需要查询那些特定的字段就可以创建一个新的类和DAO?也许只是一个类,因为没有仅特定于这些字段的表。错误是:
错误:查询返回的列在com.mistywillow.researchdb.database.entities中没有字段[commentID,questionID,quoteID,termID,topicID,deleted]。即使将其注释为非null,也请注意。或原始的。查询返回的列:[NoteID,SourceID,SourceType,Title,Summary] 列出getNotesOnTopic(String topic);
@Query("SELECT n.NoteID, s.SourceID, s.SourceType, s.Title, c.Summary FROM Comments as c " +
"LEFT JOIN Notes as n ON n.CommentID = c.CommentID " +
"LEFT JOIN Sources as s ON n.SourceID = s.SourceID " +
"LEFT JOIN Topics as t ON n.TopicID = t.TopicID WHERE t.Topic = :topic AND n.Deleted = 0")
List<Notes> getNotesOnTopic(String topic);
我要做什么: 我正在尝试使用嵌入式SQLite数据库转换现有Java桌面应用程序。上面的查询在该应用中确实可以正常工作。我只想传递这些表中的字段数据。
我尝试过的事情: 最近几天,我做了一些谷歌搜索,并访问了一些论坛(例如Android论坛,Developer.Android.com),但是大多数Room @Query示例都是单表全字段查询(例如“ Select * From table”)。我还没有发现(可能有些东西)完全解决了在联接和查询表中的特定字段时如何以及如何做。
答案 0 :(得分:1)
我想我可能已经解决了我的问题。我刚刚创建了一个名为SourceTable的新类,并在构造函数中指定了查询的字段。根据后续错误,唯一的麻烦是我是参数必须与字段名称匹配。
public class SourcesTable {
private int NoteID;
private int SourceID;
private String SourceType;
private String Title;
private String Summary;
public SourcesTable(int NoteID, int SourceID, String SourceType, String Title, String Summary){
this.NoteID = NoteID;
this.SourceID = SourceID;
this.SourceType = SourceType;
this.Title = Title;
this.Summary = Summary;
}
}
然后更新我的列表方法:
List<SourcesTable> getNotesOnTopic(String topic);