Membuat Entitas

Pada aplikasi dalam percobaan ini membutuhkan data user dan note. Setiap data tersebut dikenal dengan Entity. Perhatikan pada dua class User dan Note. Dalam entitas terdapat constructor serta setter dan getter. Hal ini diperlukan sehingga Room dapat mengenal bagaimana sebuah object akan dibuat.

Room menggunakan annotation untuk mendeklarasikan struktur schema tabel. Dengan annotation ini Room dapat mengidentifikasi setiap bagian pada class yang terkait dengan database dan meng-generate code. Lakukan langkah berikut untuk mendefinisikan schema pada class User dan Note.

  • Tambahkan annotation @Entity(tableName = "users") pada class User sehingga menjadi seperti berikut.

    @Entity(tableName = "users")
    public class User {
    
    ...
    
    }
    
  • Lakukan hal yang sama juga untuk class Note, tetapi set nilai tableName dengan nilai notes.

  • Definisikan primary key pada masing-masing entitas dengan menggunakan annotation @PrimaryKey dan auto increment. Kode untuk implementasi dapat dilihat sebagai berikut.

    ...
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    private Long id;
    ...
    
  • Untuk mendefinisikan mandatory kolom (tidak boleh null), Room menggunakan annotation @NonNull. Tambahkan annotation tersebut di kolom entitas yang bersifat mandatory.

  • Room hanya bisa menggunakan satu constructor dalam satu class, jika terdapat lebih dari satu constructor dalam entitas diperlukan penambahan annotation @Ignore.

    @Ignore
    public User(String username, String password) {
      this(null, username, password);
    }
    
    ...
    @Ignore
    public Note() { }
    
    @Ignore
    public Note(String title, Date date, String content) {
      this(null, title, date, content);
    }
    ...
    
  • Pada class Note terdapat kolom date yang bertipe Date. Room secara default hanya mendukung tipe data yang didefinisikan di java.lang. Jika terdapat tipe data khusus, maka dibutuhkan class bantu untuk mengkonversi nilai tersebut.

  • Buatlah sebuah class DateConverter dan letakkan pada package db

    public class DateConverter {
      @TypeConverter
      public static Date toDate(Long timestamp) {
        return timestamp == null ? null : new Date(timestamp);
      }
    
      @TypeConverter
      public static Long toTimestamp(Date date) {
        return date == null ? null : date.getTime();
      }
    
    }
    

Referensi: Mendefinisikan Entitas Room

results matching ""

    No results matching ""