【发布时间】:2021-02-05 20:23:19
【问题描述】:
(已更新) 我有这样的表格:
@Entity(tableName = "author_table")
public class Author {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "authorId")
private int mAuthorId;
@ColumnInfo(name = "authorName")
private String mAuthorName;
@ColumnInfo(name = "authorPublisherName")
private String mAuthorPublisherName;
和
@Entity(tableName = "book_table")
public class Book{
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "bookId")
private int mBookId;
@ColumnInfo(name = "bookName")
private String mBookName;
@ColumnInfo(name = "bookAuthors")
private String[] bookAuthors;
我已经尝试并重试了好几个星期,但我无法得到任何工作。我已经尝试了解决方法来做到这一点,没有任何关系,没有运气。我已经尝试过各种方式的关系(外键、关系、连接等)。 “了解”数据库理论很奇怪,并且已经上过这方面的 uni 课程,但我无法让它与 Android Room 一起使用。 如何从一本书中获取或查询作者或作者出版商? (如果我问得正确的话......)
我想要这本书中所有作者的出版商。
另外,嵌入如何影响存储?如果我在每本书中“嵌入”一个作者(在 Android 应用中,有数千个作者和数千本书),那基本上会在每个 Book 实体中创建每个作者的副本吗?
我试过了:
@Query("select authorPublisherNamefrom author_table where authorName IN (:names)")
LiveData<List<String>> getAllThePublishers(List<String> names);
这给了我一个 1 的列表大小。我假设它只是 ping 查询列表中得分为 true 的名字。
然后我尝试创建另一个类,例如 @sergiy tikhonov 的评论方式和来自 How can I represent a many to many relation with Android Room? 的方式:
@Entity(primaryKeys = {"authName", "bookAuth"})
public class BookAndAuthors{
private int authName, bookAuth;
}
和
public class BooksWithAuthors{
@Embedded
public Book book;
@Relation(
parentColumn = "authorName",
entityColumn = "bookAuthors",
associateBy = @Junction(
value = BookAndAuthors.class,
parentColumn = "authName",
entityColumn = "bookAuth")
)
public List<FastMoveEntity> fastMoveList;
}
但现在我不知道如何查询以获取 Publishers (authorPublisherName)。
旁注:sergiy 的回答是在课堂上绑定钥匙,我不知道该怎么做或让它发挥作用。是否必须以某种方式插入该关系?
【问题讨论】:
标签: android sqlite android-room