我正在开发一个酒店预订应用程序,我使用greenDao。
我创建了一个酒店实体。这是MyGreenDaoGenerator中的条目:
// Hotels
private Entity createHotels() {
Entity hotels = createEntity("Hotel", "hotels");
hotels.addStringProperty("hotel_id").notNull().primaryKey().unique();
hotels.addStringProperty("name").notNull();
hotels.addStringProperty("country").notNull();
hotels.addStringProperty("city").notNull();
hotels.addStringProperty("address").notNull();
hotels.addStringProperty("lt");
hotels.addStringProperty("lg");
hotels.addStringProperty("location");
hotels.addIntProperty("stars").notNull();
hotels.addFloatProperty("vote").notNull();
hotels.addBooleanProperty("viewed").notNull();
hotels.addBooleanProperty("favorite").notNull();
hotels.addLongProperty("timestamp");
return hotels;
}
如您所见,没有“图片”节点。但我知道酒店有图片,所以我创建了一个图片实体并将其与酒店联系起来
// Pictures
private Entity createPictures() {
Entity pictures = createEntity("HotelPicture", "hotel_pictures");
pictures.addStringProperty("image_url").notNull().primaryKey();
pictures.addStringProperty("image_type").notNull();
pictures.addStringProperty("image_path");
// PK
Entity hotels = getEntity("Hotel");
ToMany hotelToPictures = hotels.addToMany(pictures, pictures.addStringProperty("hotel_id").notNull().getProperty());
hotelToPictures.setName("pictures");
return pictures;
}
易。
在greenDAO生成的“Hotel.java”中,现在我得到了一个合适的房产:
protected List<HotelPicture> pictures;
现在我运行我的应用程序并从网络服务获得一些酒店。酒店包括带图片的图片节点。
"pictures":[
{
"image_type":"medie",
"image_url":"url_to_the_picture"
}
],
现在, 在自生成的Hotel.java和HotelDao.java中,我看不到任何关于设置图片的方法。我刚才有这些:
public List<HotelPicture> getPictures() {
if (pictures == null) {
if (daoSession == null) {
throw new DaoException("Entity is detached from DAO context");
}
HotelPictureDao targetDao = daoSession.getHotelPictureDao();
List<HotelPicture> picturesNew = targetDao._queryHotel_Pictures(hotel_id);
synchronized (this) {
if(pictures == null) {
pictures = picturesNew;
}
}
}
return pictures;
}
public synchronized void resetPictures() {
pictures = null;
}
我期望的是以下之一:
当我切换到show-me-the-data活动时,我看到了图片。我在此之后做了:
我从DB获得酒店
hotelsList =(ArrayList)daoSession.getHotelDao()。queryRaw(“,hotel_agreements A WHERE A.HOTEL_ID = T.HOTEL_ID AND A.AGREEMENT_ID bla bla bla ...此处未提及HotelPictures”);
显示图片
hotel.getPictures()
这导致前面提到的方法,其中评估条件“if(pictures == null)”并且图片根本不为空!它包含我的HotelPicture对象!
这似乎证实了我的第一个想法:greenDAO很聪明,看到了图片节点并将其保存在数据库中。
太糟糕了,如果我检查数据库,我会看到酒店但看不到任何图片记录
那么,如果GreenDAO没有保存在数据库中,它们如何访问这些数据?我变得疯狂,因为在我看来,我失去了DAO的全部意义,这对我来说意味着映射到Java对象的对象和关系,而不是映射到某些的Java对象 - 到数据库和一些-无论
有人可以帮我理解我失败的地方吗?
谢谢