3

我想知道如何更新 ORMLITE 中的异物?

假设我有这些课程

这是家长

public static class Parent {

    @DatabaseField(generatedId=true,allowGeneratedIdInsert=true)
    int id;
    @DatabaseField
    String name;
    ...

这是孩子

public static class Child{
    @DatabaseField(generatedId=true,allowGeneratedIdInsert=true)
    int id;
    @DatabaseField(canBeNull = false, foreign = true,foreignAutoCreate = true,foreignAutoRefresh = true, columnDefinition = "integer references parent(id) on update cascade")
    Parent parent;
    ...

假设我们有这些值:

对于父 id=5 名称 =“大”

对于孩子 id=338 父母 = {id=5,name="big"}

在这里,当我想更新我的父母 ID 时,它运行良好:

第一个ID = 5,最后一个ID = 6

UpdateBuilder<Parent, Integer> builder = ParentDao.updateBuilder();
builder.where().eq("id", firstId);
builder.updateColumnValue("id", lastId);
builder.update();

之后,我使用 select 命令来确保它是否已更新。我确定它正在为家长更新。但是当我更新我的父 ID 时,我的子对象中丢失了父对象。它看起来像这样:

对于父 id=6 名称 =“大”

对于孩子 id=338 父母 = {null}

有人知道对此有什么解决方案吗?

4

2 回答 2

2

OrmLite 不会像其他 ORM 一样自动保存嵌套对象。

所以你还需要更新 Child 。


步骤是

  1. 首先你得到 Parent 对象。
  2. 从那读孩子。
  3. 更新父级
  4. 现在将更新的父级设置为子级
  5. 也更新孩子。
于 2013-10-04T06:43:38.690 回答
2

我想知道如何更新 ORMLITE 中的异物?

我可能不理解这个问题,但正确的方法是child.parent像其他任何人一样更新该字段:

// child has a parent of #5
... child.getParent();

// update it with a new parent #6
Parent parent6 = new Parent(...);
// create the parent first so it gets an id
parentDao.create(parent6);
// set it on the child's field
child.setParent(parent6);
childDao.update(child);

这将更新child数据库中的字段。来自 parent的id字段将从 5 更新为 6。

如果您需要将parent_id字段直接从 5 更新到 6,那么您将需要刷新任何现有child对象:

childDao.refresh(child);
于 2013-12-18T21:16:21.743 回答