gpt4 book ai didi

java - 如何在房间数据库中创建实体继承?

转载 作者:行者123 更新时间:2023-12-02 04:44:22 25 4
gpt4 key购买 nike

早上好,我使用的是 SQLite 数据库,然后我已经更改为 Room。我有一个父类(super class)“Person”和两个子类“Femme”和“Enfant”。如何为 Room 中的两个子类创建表。

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;
}
}

最佳答案

下午好,伙计。让我们开始在 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

Ignore

关于java - 如何在房间数据库中创建实体继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56495838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com