References
Enable Room with this code Room Java & Room Kotlin
- Table1
@Entity(tableName = "table_1")
open class Table1(
@field:ColumnInfo(name = "id")
@field:PrimaryKey(autoGenerate = true)
var id: Int,
@field:ColumnInfo(name = "name")
var name: String
)
- Table2
@Entity(tableName = "table_2")
class Table2(
@field:ColumnInfo(name = "id")
@field:PrimaryKey(autoGenerate = true)
var id: Int,
@field:ColumnInfo(name = "name")
var name: String,
@field:ColumnInfo(name = "table_1_id")
var table_1_id: Int
)
- Table1 Join with Table2
@Dao
interface Table1Dao {
@get:Query("SELECT table_1.id, " +
"table_1.name, " +
"table_2.id as id2, " +
"table_2.name as name2, " +
"table_2.table_1_id " +
"FROM table_1 " +
"LEFT JOIN table_2 ON table_2.table_1_id = table_1.id;")
val getJOin: List<Table1_Table2>
}
- Joined Entity
class Table1_Table2(id: Int, name: String) : Table1(id, name) {
var id2 = 0
var name2: String? = null
var table_1_id = 0
}
- Use on your activity
val appDatabase: AppDatabase = AppDatabase.getInstance(application)
val list: List<Table1_Table2> = appDatabase.sampleTable1Dao().getJOin
for (i in list.indices) {
val name1: String = list[i].name
val name2: String = list[i].name2!!
Log.d(TAG, "list: " + i + "_" + name1 + "_" + name2)
}
- Example
class MainActivity : AppCompatActivity() {
val dataTable1: MutableList<Table1> = mutableListOf()
val dataTable2: MutableList<Table2> = mutableListOf()
private val TAG = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val appDatabase: AppDatabase = AppDatabase.getInstance(application)
dataTable1.add(Table1(1, "M. Fadli 1"))
dataTable1.add(Table1(2, "M. Fadli 2"))
dataTable1.add(Table1(3, "M. Fadli 3"))
dataTable1.add(Table1(4, "M. Fadli 4"))
appDatabase.sampleTable1Dao().insertAll(dataTable1)
dataTable2.add(Table2(1, "Zein 1", 1))
dataTable2.add(Table2(2, "Zein 2", 2))
dataTable2.add(Table2(3, "Zein 3", 3))
dataTable2.add(Table2(4, "Zein 4", 4))
appDatabase.sampleTable2Dao().insertAll(dataTable2)
val list: List<Table1_Table2> = appDatabase.sampleTable1Dao().getJOin
for (i in list.indices) {
val name1: String = list[i].name
val name2: String = list[i].name2!!
Log.d(TAG, "list: " + i + "_" + name1 + "_" + name2)
}
}
}
- Preview
Copyright 2020 M. Fadli Zein