Ciao a tutti,
sto provando a fare una select in Room per avere la lista dei Client con all'interno gli oggetti Civilite, Telephone ed Email
Purtroppo come risultato ottengo Client, il resto é tutto a null.
Ho provato varie soluzioni anche creando una join in sql, ma non riesco a prendere gli altri oggetti
@Query("SELECT Client.*, Civilite.* FROM Client LEFT OUTER JOIN Civilite ON Client.idCiviliteJoin = Civilite.idCivilite")
fun getClients(): List<Client>
Queste sono le mie tabelle
@Entity(tableName = "Client", indices = {@Index(value="idClient",unique = true),})
public class Client {
@PrimaryKey
@SerializedName("id")
@NonNull
private String idClient;
@Nullable
private Civilite civilite;
@Nullable
private Long idCiviliteJoin;
@Ignore
private List<Telephone> telephones;
@Nullable
private Long idEmail;
@Nullable
private Long idEmailProf;
}
@Entity(tableName = "Telephone", indices = {@Index(value = {"typeTelephone", "numero"}, unique = true)})
public class Telephone {
@PrimaryKey(autoGenerate = true)
private long idTelephonePK;
private String typeTelephone;
private String numero;
}
@Entity(tableName = "Email", indices = {@Index(value="idEmail ",unique = true),})
public class Email{
@PrimaryKey
@SerializedName("id")
@NotNull
private Long idEmail ;
private String email;
}
@Entity(tableName = "Civilite", indices = {@Index(value="idCivilite",unique = true),})
public class Civilite {
@PrimaryKey
@SerializedName("id")
@NotNull
private Long idCivilite ;
private String intitule;
}
Ho creato una classe di appoggio
@Entity(tableName = "ClientCiviliteJoin",
primaryKeys = { "idClient", "idCivilite" },
foreignKeys = {
@ForeignKey(entity = Client.class,
parentColumns = "idCiviliteJoin",
childColumns = "idClient"),
@ForeignKey(entity = Civilite.class,
parentColumns = "idCivilite",
childColumns = "idCivilite")
})
public class ClientCiviliteJoin {
public final int idClient;
public final int idCivilite;
public ClientCiviliteJoin(final int idClient, final int idCivilite) {
this.idClient = idClient;
this.idCivilite = idCivilite;
}
eseguendo una query cosi
@Query("SELECT * FROM Client INNER JOIN clientcivilitejoin ON client.idClient=clientcivilitejoin.idClient")
fun getClientsJoin(): List<Client>
ma ricevo questo errore, forse perché il campo idCiviliteJoin non é una chiave, ma non ho capito ancora come poter creare più chiavi nella tabella
error: com.genapi.mobileandroid.model.ClientCiviliteJoin has a foreign key (idClient) that references com.genapi.mobileandroid.model.Client (idCiviliteJoin) but com.genapi.mobileandroid.model.Client does not have a unique index on those columns nor the columns are its primary key
Qualcuno mi puoi suggerire come avere l'oggetto Client completo?
Grazie