sql >> Database teknologi >  >> RDS >> Mysql

Android Room - Håndtering af liste over objekter i et objekt og forespørgselsresultat

Room understøtter ikke dette direkte på grund af nogle potentielle problemer med doven indlæsning , men med noget DAO-trickeri er det muligt. Du skal håndtere indsættelserne eksplicit, og for at forespørge på alt på én gang skal du bruge en POJO til at omslutte det hele.

@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();

}

Konstruktører, getters og sættere er udeladt for kortheds skyld.




  1. mysql-transaktion - rulle tilbage på enhver undtagelse

  2. Entity framework database udbyder kompatibilitetsfejl

  3. SQL - Call Stored Procedure for hver post

  4. MySQL LEFT JOIN dublerer resultater