Объект Greendao при сериализации с использованием GSON не содержит связанного объекта в строке Generated JSON

У меня есть два объекта, сгенерированные с использованием генератора Greendao. Эти две организации – больница и пациент. Между больницей и пациентом существует взаимосвязь от одного до многих. Таким образом, в одной больнице может быть несколько пациентов, и у одного пациента может быть только одна больница. Таким образом, больница будет содержать список пациентов.

Код для 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"); } } 

Поэтому в моей основной деятельности я создал один объект больницы под названием «Больница 1» и два объекта пациента «Пациент 1» и «Пациент 2». Теперь у двух пациентов «Больница 1» в качестве родственной больницы. Patient1.getHospital () вернет объект Hospital1 и patient2.getHospital () также вернет объект Hospital1. Hospital1.getPatient () вернет список пациентов, содержащих объект patient1 и patient2.

Мой код активности ->

 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(); */ } } 

Однако, когда я извлекаю объект Hospital1 из базы данных и извлекаю его с помощью GSON. Строка сгенерированная строка JSON не содержит ключа пользователя и соответствующего значения списка, содержащего Patient1 и Patient2.Сгенерированная строка JSON:

 { "Hospital_Name":"Hospital 1", "id":1 } 

Таким образом, созданная строка JSON не содержит всех атрибутов объекта больницы. Как это решить?

Взгляните на отношения Docs: отношения «один» и «многие» разрешаются лениво, при доступе к ним

Для многих отношений, разрешенных при первом доступе (и после сброса)

Так что просто нужно вызвать hospital1.getPatients (); Перед преобразованием объекта в Json.So. После добавления этой строки ваш код будет выглядеть ниже.

 Hospital hospital1 = daoSession1.getHospitalDao().loadByRowId(1); hospital1.getPatients(); Gson gson = new Gson(); Log.e("msg", gson.toJson(hospital1)); 

Я надеюсь, что это решит вашу проблему

Прежде всего, ваш класс Hospital должен иметь параметр списка для хранения объектов пациента. Это может быть ArrayList<Patinet> тогда вам нужно получить список пациентов из базы данных,

 Hospital hospital1 = daoSession1.getHospitalDao().loadByRowId(1); //This block can change according to your design ArrayList<Patient> patinets = daoSession.getPatientDao().getPatients(hospital1.getId()); hospital1.setPatinets(patinets); Gson gson = new Gson(); Log.e("msg", gson.toJson(hospital1));