私はsqliteデータベースをルームライブラリで変更しようとしています。私は左の結合クエリと少し混乱しています。アンドロイドルームに参加しました
私はsqliteで実装していますが、どのように私は同じwithh部屋を達成することができますか分からないのですか?
最初のテーブル::通知
db.execSQL("CREATE TABLE IF NOT EXISTS $TABLE_NAME ($COLUMN_ID INTEGER PRIMARY KEY, $ICON TEXT, $TITLE INTEGER," +
" $DATE INTEGER, $TYPE INTEGER,$URL TEXT, $MESSAGE INTEGER, FOREIGN KEY($TITLE) REFERENCES ${TableNotificationsTrans.getTableName(this)}(id)," +
"FOREIGN KEY($MESSAGE) REFERENCES ${TableNotificationsTrans.getTableName(this)}(id))")
第二のテーブル:私は通知を格納しています私は何をやっているNotification_Trans
db.execSQL("CREATE TABLE IF NOT EXISTS $TABLE_NAME ($COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, $COLUMN_EN TEXT, $COLUMN_GU TEXT, $COLUMN_HI TEXT)")
ここ
は、私のテーブルの作成です 通知テーブルの名前と説明は、 notification_transに特定の言語で格納されます。クエリを達成する
DatabaseHelper.database!!.rawQuery("SELECT A.$COLUMN_ID, A.$ICON, N.${language.toLowerCase()} $TITLE, A.$DATE, A.$TYPE, A.$URL, M.${language.toLowerCase()} $MESSAGE FROM $TABLE_NAME A LEFT JOIN NotificationsTrans N ON A.$TITLE = N.id LEFT JOIN NotificationsTrans M ON A.$MESSAGE = M.id ORDER BY $DATE DESC LIMIT $pageNum*10, 10", null)
質問
How can I achieve same with room?
編集
私のアプリケーションは、私は特定の言語での通知のタイトルを取得しています多言語アプリケーションであり、 、lヒンディー語やグジャラト語。 通知テーブルに通知の詳細を保存しています。タイトルはnotification_transです。
NotificationTransには、id、english、hindi、gujaratiの列があります。
ユーザーがグジャラートを求めたとき、私はnotificationTransのコラムgujaratiから通知のタイトルを取得しています。
これは、sqliteで実行できます。
しかし、今、私はあなたが両方のためのモデルクラスを作成する必要がありルーム
静的クエリを使用していた場合は、Room内でSQLiteで使用したのとまったく同じものを使用します。あなたのケースでは、文字列の補間を使用してクエリを生成しています。この場合、ルームはあなたを助けません。 – CommonsWare