GreenDAO许多关系不添加行来加入类

时间:2017-08-16 21:25:58

标签: android greendao

您好我正在使用greenDAO To-Many关系,如下所示: 用户可以收听0或多个有声读物(代码中的audiolibro),所以我在实体类中有这个。

@ToMany
@JoinEntity(entity = UsuarioAudiolibro.class,
            sourceProperty = "usuarioID",
            targetProperty = "audiolibroID"
            )
List<Audiolibro> audiolibros;

我正在使用测试类加载一些测试数据,如下所示:

public class Prueba {
public static void datosPrueba(DaoSession session){
    session.getPersonaDao().deleteAll();
    session.getUsuarioDao().deleteAll();
    session.getAudiolibroDao().deleteAll();
    Persona pers = new Persona();
    // ... set persona data

    Persona pers2 = new Persona();
    // ... idem

    Persona pers3 = new Persona();
    // ... same

    // Here I persist Persona
    PersonaDao persDao = session.getPersonaDao();
    persDao.insertOrReplace(pers);
    persDao.insertOrReplace(pers2);
    persDao.insertOrReplace(pers3);

    //Create users 1-to many
    Usuario user = new Usuario();
    //sets data for user
    Usuario user2 = new Usuario();
    //sets data for another user
    Usuario user3 = new Usuario();
    //same again

    user.setPersona(pers);
    user2.setPersona(pers2);
    user3.setPersona(pers3);
    // persist usuario
    UsuarioDao userDao = session.getUsuarioDao();
    userDao.insertOrReplace(user);
    userDao.insertOrReplace(user2);
    userDao.insertOrReplace(user3);
    userDao.insertOrReplace(user4);


    //Create audiolibros

    Audiolibro audio = new Audiolibro();
    //... set audiolibro data

    Audiolibro audio2 = new Audiolibro();
    // ... set data

    Audiolibro audio3 = new Audiolibro();
    // ... set data

    //persist audiolibro
    AudiolibroDao audioDao = session.getAudiolibroDao();
    audioDao.insertOrReplace(audio);
    audioDao.insertOrReplace(audio2);
    audioDao.insertOrReplace(audio3);

    //add audiolibros to usuario
    List<Audiolibro> audiolibrosUser = user.getAudiolibros();
    audiolibrosUser.add(audio);
    audiolibrosUser.add(audio2);
    userDao.update(user);
    List<Audiolibro> audiolibrosUser2 = user2.getAudiolibros();
    audiolibrosUser2.add(audio2);
    audiolibrosUser2.add(audio3);
    userDao.update(user2);
    List<Audiolibro> audiolibrosUser3 = user3.getAudiolibros();
    audiolibrosUser3.add(audio3);
    audiolibrosUser3.add(audio);
    userDao.update(user3);
    }
}

此后可以在此处访问audilibros列表,但是当我尝试从活动中的会话中检索数据时,列表似乎为空。我尝试在活动代码中重置列表wit resetlist()但不起作用。当我检查数据库时,JoinTable中没有行。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我不得不手动创建连接实体,但不知道,但它有效。

答案 1 :(得分:0)

你应该像这样插入

        DeviceGroup group = new DeviceGroup();
        group.setId(1l);
        session.getDeviceGroupDao().insert(group);

        Device device1 = new Device();
        device1.setId(1l);
        session.getLedDeviceDao().insert(device1);

        device2 = new Device();
        device2.setId(2l);
        session.getLedDeviceDao().insert(device2);
        ......

        JoinDeviceToGroup join1 = new JoinDeviceToGroup();
        join1.setId(1l);
        join1.setGroupId(1l);
        join1.setDeviceId(1l);
        session.getJoinDeviceToGroupDao().insert(join1);

        JoinDeviceToGroup join2 = new JoinDeviceToGroup();
        join2.setId(2l);
        join2.setGroupId(1l);
        join2.setDeviceId(2l);
        session.getJoinDeviceToGroupDao().insert(join2);
        ......