GreenDAO 对许多关系不添加要加入的行 class
GreenDAO To many relations not adding rows to join class
您好,我正在使用 greenDAO 的多对多关系,如下所示:
一个用户可以收听 0 或许多有声读物(代码中的 audiolibro)所以我在实体 class.
中有这个
@ToMany
@JoinEntity(entity = UsuarioAudiolibro.class,
sourceProperty = "usuarioID",
targetProperty = "audiolibroID"
)
List<Audiolibro> audiolibros;
我正在使用测试 class 加载一些测试数据,如下所示:
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 列表,但是当我尝试从 activity 中的会话中检索数据时,列表似乎是空的。我尝试在 activity 代码中使用 resetlist() 重置列表,但没有用。当我检查数据库时,JoinTable 中没有行。
我做错了什么?
我不得不手动创建连接实体,不知道,但它起作用了。
你应该这样插入
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);
......
您好,我正在使用 greenDAO 的多对多关系,如下所示: 一个用户可以收听 0 或许多有声读物(代码中的 audiolibro)所以我在实体 class.
中有这个@ToMany
@JoinEntity(entity = UsuarioAudiolibro.class,
sourceProperty = "usuarioID",
targetProperty = "audiolibroID"
)
List<Audiolibro> audiolibros;
我正在使用测试 class 加载一些测试数据,如下所示:
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 列表,但是当我尝试从 activity 中的会话中检索数据时,列表似乎是空的。我尝试在 activity 代码中使用 resetlist() 重置列表,但没有用。当我检查数据库时,JoinTable 中没有行。
我做错了什么?
我不得不手动创建连接实体,不知道,但它起作用了。
你应该这样插入
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);
......