我有一个数据库,连接工人到一个工作。每个工作,然后由海报,每个海报只能分配给一个人。
这一切都很简单,但流程有点复杂。工人需要申请工作,然后才能分配给他们。在他们被雇用后,工人可以开始选择他们想要工作的海报。
如果有一种方法可以向Junction表中添加附加信息,那就太好了。这样,在Jobs和Workers Junction表中,我可以执行两个单独的查询,一个查询是在申请职务的位置,另一个查询是在批准职务的位置。
另一种方法是使用一个单独的Junction表,一个用于已申请的Job,另一个用于已接受的Job;但是这会变得非常混乱和烦人,因为我必须处理两个单独的列表。最好是如果我可以在Junction表中添加一列,然后在Job列表中使用,并且单个Job可以只是应用或批准。
感谢您花时间阅读我的帖子。以下是有问题的实体和关系
@Entity(
foreignKeys = [
ForeignKey(
entity = Owner::class,
parentColumns = ["owner_id"],
childColumns = ["owner_id_map"],
onDelete = ForeignKey.CASCADE,
onUpdate = ForeignKey.CASCADE
)
]
)
data class Job (
@PrimaryKey val job_id: Long,
val status: Int,
@ColumnInfo(index = true)
val owner_id_map: Long,
val title: String,
val city: String
) : Serializable
JobPW是Job with Workers and Posters的缩写
x一个一个一个一个x一个一个二个一个x一个一个三个一个
下面是构建作业列表的查询。
@Transaction
@Query("SELECT * FROM job")
fun getJobsFlow(): Flow<List<JobPW>>
@Transaction
@Query("SELECT * FROM job")
suspend fun getJobs(): List<JobPW>
(One版本是一个流程,我想最好使用这个版本)
1条答案
按热度按时间7jmck4yq1#
如果有一种方法可以在我的连接表中添加额外的信息,那就太好了。
有一种方法,您只需(根据结果)将该表视为普通表并从中检索数据。
所以你可以有这样的东西:
工作示例
下面是一个工作示例,基于问题中的代码,添加了省略的类来科普(为了演示的简洁,适合在没有流/挂起的主线程上运行)。因此,演示的整个数据库代码是:
为了演示在活动中使用了以下代码。该代码加载了一些数据(仅用于单次运行,而不是重复运行),然后使用修改后的JobPW POJO从问题中提取数据(请注意,这只是为了获得额外的数据而修改的):-
结果
可以简单地通过将JobWorkerCrossRef表作为普通表(通过
@Relation
)而不是Junction表来检索相应的额外数据。因此,简而言之,为了不从junction表中获取数据,您可以通过Junction将其用作junction表。
更进一步,合并Worker和Extra数据
要获得组合的数据MapWorker和Extra,您可以使用POJO,通过
@Relation
Worker来获得特定的Worker详细信息。作为后者的一个例子,你可以有:
例如
沿着with(allowinggetJobsto be as is):-
然后在活动代码中使用以下内容:
然后,当使用相同的数据时,日志中的结果将显示:
即,组合工人和额外数据。
(One版本是一个流程,我想最好使用这个版本)
在流中 Package 与处理流一样简单。