Как создать наследование сущностей в комнате базы данных? - PullRequest
0 голосов
/ 07 июня 2019

Доброе утро, я использовал базу данных SQLite, затем перешел на Room. У меня есть суперкласс "Персона" и два подкласса "Femme" и "Enfant". Как я могу создать таблицы для двух подклассов в комнате.

Person.java

public class Personne {

private  int idP;
private String nom,prenom;
private int age, poids;


public Personne(String nom, String prenom, int age, int poids) {

    this.nom = nom;
    this.prenom = prenom;
    this.age = age;
    this.poids = poids;

}

public Personne(String nom, String prenom) {
    this.nom = nom;
    this.prenom = prenom;

}

Femme.java

  public class Femme extends Personne { 

   private String pseudo,mdp,grpSang;

public Femme(String nom, String prenom, int age, int poid, String pseudo, 
 String mdp, String grpSang) {
    super(nom, prenom, age, poid);
    this.pseudo = pseudo;
    this.mdp = mdp;
    this.grpSang = grpSang;
}
}

Enfant.java

 public class Enfant extends Personne {

     private float taille;
     private Sexe sexe;
      private Date DN;

public Enfant(String nom, String prenom, int age, int poid, int taille, 
 Sexe sexe) {
    super(nom, prenom, age, poid);
    this.taille = taille;
    this.sexe = sexe;
}
}

1 Ответ

0 голосов
/ 11 июня 2019

Добрый день, приятель.Давайте начнем создавать две переменные в объекте Persoone.Ваш новый Personne.java будет выглядеть следующим образом:

@Entity (tableName = "yourPersonneTableName")
public class Personne {

@PrimaryKey
private  int idP;
private String nom,prenom;
private int age, poids;
@Ignore
private List<Femme> femmeList;
@Ignore
private List<Enfant> enfant;

// setters and getters here

}

В приведенном выше блоке кода я добавил список двух ваших подклассов, но @Ignore их.Потому что они мне не понадобятся, но.Вы действительно можете удалить их.

Давайте перейдем к вашим подклассам.

@Entity (tableName = "yourEnfantTableName")
public class Enfant{

        @PrimaryKey
        private long newId;
        // you can have newId here or change one of your original parameters into PrimaryKey
        private int idP;
        // you can manipulate through this id of your Personne table there.
        private float taille;
        private Sexe sexe;
        private Date DN;
        // setters and getters here
    }

@Entity (tableName = "yourFemmeTableName")
public class Femme{ 
    @PrimaryKey
    private long newId
    // you can have newId here or your can change one of your parameter into PrimaryKey
    private int idP;
    // you can manipulate through this id of your Personne table there.
    private String pseudo,mdp,grpSang;

}

Вот и все.Вы можете добавить данные во все эти таблицы частично.Но вы можете использовать их по своему усмотрению через idP.

Другой тип использует @ TypeConverters

Один пример использования вашего класса Enfant

public class EnfantToStringConverter {

@TypeConverter
public String imageToString(List<Enfant> enfant){
    return new Gson().toJson(enfant);
}

@TypeConverter
public List<ImagesVO> stringToImage(String strGson){
    return new Gson().fromJson(strGson, new TypeToken<List<Enfant>>(){}.getType());
}

}

Но ваш Personne.class немного изменится.

Вот ваши ресурсы.

@Entity (tableName = "yourPersonneTableName")
public class Personne {

@PrimaryKey
private  int idP;
private String nom,prenom;
private int age, poids;

@TypeConverters({FemmeToStringConverter.class})
private List<Femme> femmeList;

@TypeConverters({EnfantToStringConverter.class})
private List<Enfant> enfant;

// setters and getters here

}

В любом случае, вам нужно немного прочитать здесь.

RoomTypeConverter

RoomTypeConverters

Игнорировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...