Mam dwie jednostki wygenerowane przy użyciu generatora Greendao. Te dwie jednostki to Szpital i Pacjent. Istnieje jeden do wielu relacji między Szpitalem a Pacjentem. Zatem jeden szpital może mieć wielu pacjentów, a jeden Pacjent może mieć tylko jeden szpital. Tak więc szpital będzie zawierał listę pacjentów.Jednostka Greendao w przypadku serializacji za pomocą GSON nie zawiera pokrewnej jednostki w wygenerowanym ciągu JSON
Kod greendao Generator IS->
package com.myapp.generator;
import org.greenrobot.greendao.generator.DaoGenerator;
import org.greenrobot.greendao.generator.Entity;
import org.greenrobot.greendao.generator.Property;
import org.greenrobot.greendao.generator.Schema;
import org.greenrobot.greendao.generator.ToMany;
public class MyClass {
public static void main(String[] args) throws Exception {
Schema schema = new Schema(1, "com.example.mohit.greendaotest.db");
Entity hospital = schema.addEntity("Hospital");
hospital.addIdProperty().autoincrement();
hospital.addStringProperty("Hospital_Name");
Entity patient=schema.addEntity("Patient");
patient.addIdProperty().autoincrement();
patient.addStringProperty("Patient_Name");
Property hospitalId = patient.addLongProperty("hospitalId").getProperty();
// patient has a one assigned hospital
patient.addToOne(hospital, hospitalId);
// hospital has many patients
ToMany hospitalToPatients = hospital.addToMany(patient, hospitalId);
hospitalToPatients.setName("patients");
DaoGenerator dg=new DaoGenerator();
dg.generateAll(schema,"./app/src/main/java");
}
}
Więc w moim głównej działalności i stworzyliśmy jeden szpital Obiekt o nazwie „Szpital 1” i dwa pacjent obiekt o nazwie „Pacjent 1” i „Pacjent 2”. Teraz dwoje pacjentów ma "Szpital 1" jako ich powiązany szpital. patient1.getHospital() zwróci obiekt Hospital1, a patient2.getHospital() zwróci obiekt Hospital1. Hospital1.getPatient() zwróciłaby listę pacjentów zawierających zarówno obiekt pacjenta1, jak i pacjenta2.
Moja działalność jest kod ->
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.google.gson.Gson;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "lease-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();
Hospital hospital = new Hospital();
hospital.setHospital_Name("Hospital 1");
long hospital_id = daoSession.getHospitalDao().insert(hospital);
Patient patient1 = new Patient();
patient1.setPatient_Name("Patient 1");
Patient patient2 = new Patient();
patient2.setPatient_Name("Patient 2");
patient1.setHospitalId(hospital_id);
patient2.setHospitalId(hospital_id);
/*patient1.setHospital(hospital);
patient2.setHospital(hospital);*/
daoSession.getPatientDao().insert(patient1);
daoSession.getPatientDao().insert(patient2);
/* daoSession.getHospitalDao().load(hospital_id).getPatients().add(patient1);
daoSession.getHospitalDao().load(hospital_id).getPatients().add(patient2);
daoSession.getHospitalDao().update(daoSession.getHospitalDao().load(hospital_id));*/
daoSession.clear();
DaoSession daoSession1 = daoMaster.newSession();
Hospital hospital1 = daoSession1.getHospitalDao().loadByRowId(1);
Gson gson = new Gson();
Log.e("msg", gson.toJson(hospital1));
/*Toast.makeText(this,String.valueOf(daoSession1.getPatientDao().loadAll().size()),Toast.LENGTH_SHORT).show();
*/
}
}
Jednak kiedy odzyskać Hospital1 obiekt z bazy danych i pobrać go za pomocą GSON. Wygenerowany ciąg JSON nie zawiera żadnego klucza patientList i odpowiednią wartość listy zawierającej Patient1 i Patient2.The generowane JSON ciąg jest:
{
"Hospital_Name":"Hospital 1", "id":1
}
Więc Generated JSON String nie zawiera wszystkie atrybuty Szpitala Podmiotu . Jak rozwiązać ten problem?
Szpital hospital1 = daoSession1.getHospitalDao() loadByRowId (1).; i pacjent pacjenta 1 = daoSession1.getPatientDao(). loadByRowId (1); są oddzielnymi rzeczami, które zwrócą informacje o ich własnych modelach. Nie są one ze sobą powiązane nigdzie w wyżej wymienionym kodzie –
@UsmanRana między wieloma zdefiniowano relację między nimi ... Property hospitalId = patient.addLongProperty ("hospitalId"). GetProperty(); // pacjent ma przypisany szpital patient.addToOne (hospital, hospitalId); // szpital ma wielu pacjentów ToMany hospitalToPatients = hospital.addToMany (patient, hospitalId); hospitalToPatients.setName ("pacjenci"); –