Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Android Room – Umgang mit einer Liste von Objekten in einem Objekt und Abfragen des Ergebnisses

Room unterstützt dies nicht direkt aufgrund einiger mögliche Probleme mit verzögertem Laden , aber mit einigen DAO-Tricks ist es möglich. Sie müssen die Einfügungen explizit handhaben, und um alles auf einmal abzufragen, benötigen Sie ein POJO, um alles einzuschließen.

@Entity(foreignKeys = {
    @ForeignKey(
            entity = PersonEntity.class,
            parentColumns = "personId",
            childColumns = "personIdFk",
            onDelete = CASCADE
    )
})
public class Pet {
    @PrimaryKey
    private String petId;
    private String name;
    private String personIdFk;
}

@Entity(tableName = "person")
public class PersonEntity {
    @PrimaryKey
    private String personId;
}

public class Person {
    @Embedded
    private PersonEntity personEntity;
    @Relation(parentColumn = "personId", entityColumn = "personIdFk")
    private List<Pet> pets;
}

@Dao
public abstract class PersonDao {

    @Insert
    protected abstract void insert(PersonEntity personEntity);

    @Insert
    protected abstract void insert(List<Pet> pets);

    @Transaction
    public void insert(Person person) {
        insert(person.getEntity());
        insert(person.getPets());
    }

    @Query("SELECT * FROM person")
    public abstract List<Person> getAll();

}

@Database(entities = {PersonEntity.class, Pet.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

    public abstract PersonDao personDao();

}

Konstruktoren, Getter und Setter wurden der Kürze halber weggelassen.