質問

I used the following code to define two entities which are related by a one-to-many relationship.

private static void addLuckyDrawClick(Schema schema) {
    Entity luckyDrawClick = schema.addEntity("LuckyDrawClick");
    luckyDrawClick.addIdProperty();
    luckyDrawClick.addDateProperty("clickDate").notNull();
    luckyDrawClick.addStringProperty("user").notNull();
    Property userId = luckyDrawClick.addLongProperty("userId").getProperty();
    user.addToMany(luckyDrawClick, userId);
    Main.luckyDrawClick = luckyDrawClick;
}

private static void addWeeklyClickList(Schema schema) {
    Entity weeklyClickList = schema.addEntity("WeeklyClickList");
    weeklyClickList.addIdProperty();
    Property clickOne = weeklyClickList.addLongProperty("clickOneId").getProperty();
    weeklyClickList.addToOne(luckyDrawClick, clickOne, "clickOne");
    Property clickTwo = weeklyClickList.addLongProperty("clickTwoId").getProperty();
    weeklyClickList.addToOne(luckyDrawClick, clickTwo, "clickTwo");
    Property clickThree = weeklyClickList.addLongProperty("clickThreeId").getProperty();
    weeklyClickList.addToOne(luckyDrawClick, clickThree, "clickThree");
    Property clickFour = weeklyClickList.addLongProperty("clickFourId").getProperty();
    weeklyClickList.addToOne(luckyDrawClick, clickFour, "clickFour");
    Property clickFive = weeklyClickList.addLongProperty("clickFiveId").getProperty();
    weeklyClickList.addToOne(luckyDrawClick, clickFive, "clickFive");
    weeklyClickList.addBooleanProperty("latest");
    Main.weeklyClickList = weeklyClickList;
}

I used the following code to persist the entities.

    weeklyClickListDao = daoSession.getWeeklyClickListDao();
    User user = new User();
    user.setUsername("usr");
    user.setGender(false);
    user.setName("Usr");
    user.setLocation("loc");
    user.setPassword("p");
    user.setDateOfBirth(new Date());
    user.setDeviceId("id");
    user.setContactNumber("contact");
    userDao.insert(user);
    Log.d("size", "" + userDao.loadAll().size());

    currentUser = userDao.loadAll().get(0);

    WeeklyClickList wcl = new WeeklyClickList();
    wcl.setLatest(true);

    LuckyDrawClick ldc1 = new LuckyDrawClick();
    GregorianCalendar date1 = new GregorianCalendar();
    date1.set(Calendar.DAY_OF_MONTH, date1.get(Calendar.DAY_OF_MONTH) - 4);
    date1.set(Calendar.HOUR_OF_DAY, 0);
    date1.set(Calendar.MINUTE, 0);
    date1.set(Calendar.SECOND, 0);
    date1.set(Calendar.MILLISECOND, 0);
    ldc1.setClickDate(date1.getTime());
    ldc1.setUser(currentUser.getUsername());
    wcl.setClickOne(ldc1);
    wcl.setClickOneId(ldc1.getId());        
    luckyDrawClickDao.insert(ldc1);

    LuckyDrawClick ldc2 = new LuckyDrawClick();
    GregorianCalendar date2 = new GregorianCalendar();
    date2.set(Calendar.DAY_OF_MONTH, date1.get(Calendar.DAY_OF_MONTH) - 3);
    date2.set(Calendar.HOUR_OF_DAY, 0);
    date2.set(Calendar.MINUTE, 0);
    date2.set(Calendar.SECOND, 0);
    date2.set(Calendar.MILLISECOND, 0);
    ldc2.setClickDate(date2.getTime());
    ldc2.setUser(currentUser.getUsername());        
    wcl.setClickTwo(ldc2);
    wcl.setClickTwoId(ldc2.getId());
    luckyDrawClickDao.insert(ldc2);

    LuckyDrawClick ldc3 = new LuckyDrawClick();
    GregorianCalendar date3 = new GregorianCalendar();
    date3.set(Calendar.DAY_OF_MONTH, date1.get(Calendar.DAY_OF_MONTH) - 2);
    date3.set(Calendar.HOUR_OF_DAY, 0);
    date3.set(Calendar.MINUTE, 0);
    date3.set(Calendar.SECOND, 0);
    date3.set(Calendar.MILLISECOND, 0);
    ldc3.setClickDate(date3.getTime());
    ldc3.setUser(currentUser.getUsername());
    wcl.setClickThree(ldc3);
    wcl.setClickThreeId(ldc3.getId());
    luckyDrawClickDao.insert(ldc3);

    LuckyDrawClick ldc4 = new LuckyDrawClick();
    GregorianCalendar date4 = new GregorianCalendar();
    date4.set(Calendar.DAY_OF_MONTH, date1.get(Calendar.DAY_OF_MONTH) - 1);
    date4.set(Calendar.HOUR_OF_DAY, 0);
    date4.set(Calendar.MINUTE, 0);
    date4.set(Calendar.SECOND, 0);
    date4.set(Calendar.MILLISECOND, 0);
    ldc4.setClickDate(date4.getTime());
    ldc4.setUser(currentUser.getUsername());
    wcl.setClickFour(ldc4);
    wcl.setClickFourId(ldc4.getId());
    luckyDrawClickDao.insert(ldc4);

    weeklyClickListDao.insert(wcl);

But foreign key references aren't included in the records.

Have I done anything wrong?

役に立ちましたか?

解決

You are setting the ClickFourId (as example) in wcl before inserting the ldc in the database, when you do:

wcl.setClickFourId(ldc4.getId());

the ldc4.getId() will return null, and when you insert the wcl it has no foreign key to the ldc4.

Try this way:

luckyDrawClickDao.insert(ldc4);
wcl.setClickFourId(ldc4.getId());
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top