I have 2 Entities, Coin and CoinRevenue.
Basically, coin holds the price in USD for some other currency.
For example, Coin with symbol EUR with value of 1.0356
@Entity(tableName = "coin")
data class Coin(
@field:PrimaryKey(autoGenerate = false)
var id: String = "",
var symbol: String = "",
var pricInUsd: Float = 0f)
CoinRevenue is an Entity that I use to hold how much coins of that specific coins the User have. For example, CoinRevenue has relation to Coin Entity with EUR symbol and amount of 1000.
@Entity(tableName = "coinRevenue")
data class CoinRevenueNew(
@field:PrimaryKey(autoGenerate = true)
var id: Int = 0,
var coin: Coin? = null,
var amount: Float = 0f)
Now I want to fetch CoinRevenue from the database and get the updated Coin from the database.
for example, i saved the Coin with (EUR,1.0253) and than Saved a CoinRevenue with that coin.
After that I updated the Coin with (EUR,2.522) I want that the Coin object inside CoinRevenue will be updated as well.
I understand that @Embedded just add the inner objet fields as colums to the same parent object. and when I use relation, I have to use a List or a Set. but I always have 1 Coin inside CoinRevenue.
My coinDAO:
@Query("select * from coin order by rank")
fun getAllCoins(): Flowable<List<CoinDB>>
@Query("select * from coin where rank = 1")
fun getFirstCoin(): Maybe<CoinDB>
@Query("select * from coin where favourite = 1 order by rank")
fun getAllFavouriteCoins(): Flowable<List<CoinDB>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertCoin(coinDB: CoinDB)
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertCoins(coinsList: List<CoinDB>)
// -----------------
// CoinRevenue
// -----------------
@Query("select * from coinRevenue order by rank")
fun getAllCoinsRevenue(): Flowable<List<CoinRevenue>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertCoinRevenue(coinRevenue: CoinRevenue)
@Delete()
fun deleteCoinRevenue(coinRevenue: CoinRevenue)
What is the best way to creat this?
@Relation
seems to me not the proper solution to the one-to-one relation problem. The documentation saysThe type of the field annotated with Relation must be a List or Set.
so it doesn't fit very well with a one-to-one relation. Looking at Yigit Boyar introduction to Room, it seems to me that the best solution would be to create a third POJO class. – Hipster