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 name = "big" の場合

子の場合 id=338 親 = {id=5,name="big"}

ここで、親IDを更新したい場合、うまく機能しています:

firstId=5、lastId=6

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

その後、selectコマンドを使用して、更新されているかどうかを確認しています。親のために更新していると確信しています。しかし、親 ID を更新すると、子オブジェクトの親オブジェクトが失われます。次のように表示されます。

id=6 name = "big" の場合

id=338 親 = {null}の場合

誰かがこれに対する解決策を知っていますか?

4

2 に答える 2

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されます。親からのidフィールドは 5 から 6 に更新されます。

parent_idフィールドを 5 から 6 に直接更新する必要がある場合は、既存のchildオブジェクトを更新する必要があります。

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