edw*_*rek 2 database android android-room
我需要加入三个Entities
1.
@Entity(tableName = "accounts") data class AccountModel(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
var name: String = "name",
var currency: String = "currency",
var number: String? = null,
var color: Int = 0,
var value: Double = 0.0,
var start_value: Double = 0.0,
var note: String? = null,
var accountType: String? = null)
Run Code Online (Sandbox Code Playgroud)
@Entity(tableName = "categories")data class CategoryModel (
@PrimaryKey(autoGenerate = true)
var id: Int? = null,
var name: String,
var color: Int,
var is_income: Boolean
)
Run Code Online (Sandbox Code Playgroud)
@Entity(tableName = "transactions")
data class TransactionModel(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
var name: String? = null,
var date: Long = 0L,
var value: Double = 0.0,
var account_id: Int? = null, <-
var category_id: Int? = null, <-
var description: String? = null,
var is_income: Boolean = true
)
Run Code Online (Sandbox Code Playgroud)
它是什么类型的关系?我可以一对一。是一对多吗?我应该使用吗Junction?
这是一对一的关系。您可以添加下一个课程:
data class TransactionWithAccountAndCategory(
@Embedded val transaction: Transaction,
@Relation(
parentColumn = "account_id",
entityColumn = "id"
)
val account: AccountModel
@Relation(
parentColumn = "category_id",
entityColumn = "id"
)
val category: CategoryModel
)
Run Code Online (Sandbox Code Playgroud)
并使用下一个方法获取它:
@Transaction
@Query("SELECT * FROM transactions")
fun getTransactions(): List<TransactionWithAccountAndCategory>
Run Code Online (Sandbox Code Playgroud)
因此,您不必使用Junction,因为只有与附加表的多对多关系才需要它(并且根据您的实体,您没有这种情况)。