ibatis вставка родительских / дочерних отношений - PullRequest
0 голосов
/ 07 марта 2012

У меня есть классическая настройка

public class Parent {
        String name;
        Collection<Child> children;

    private class child{
      string name;
    }
}

Теперь я хочу сначала вставить родительские атрибуты в родительскую таблицу, а затем получить идентификатор и, наконец, сохранить дочерние записи. Что является лучшим способом добиться того же в ibatis

1 Ответ

0 голосов
/ 05 апреля 2012

Вы можете сделать следующее, например, с помощью iBatis (я использую iBatis версии 2.3.4, поэтому этот пример основан на этом). Создание пакета утверждений может улучшить производительность. Также важно отметить, что пакет будет упакован в одну транзакцию, как если бы он не был упакован, тогда для каждого оператора будет запускаться новая транзакция (производительность может быть проблемой в зависимости от размера пакета, я полагаю).

См. Пример ниже. Вы заметите, что запуск пакета startBatch() начинается только после обновления или вставки родительской записи. Это потому, что сгенерированные базой данных ключи не будут сгенерированы, пока вы не вызовете executeBatch(). Это означает, что если вы используете selectKey для обновления ваших объектов сгенерированными ключами, они будут возвращать ноль. Вот почему создание / обновление родительской записи выполняется до оператора startBatch(). Надеюсь, это поможет вам в качестве примера.

try {
    sqlMap.startTransaction();

    if (parent.getId == null) {
       sqlMap.insert("createParent", parent);
    } else {
       sqlMap.update("updateParent", parent);
    }

    sqlMap.startBatch();
    for (final Child exapleChild: parent.getChildren()) {
        exapleChild.setParentId(parent.getId);
        sqlMap.insert("createChildForParent", objectReference1);
    }
    sqlMap.executeBatch();
    sqlMap.commitTransaction();
} catch (final SQLException e) {
    throw new XXXException(e);
} finally {
    try {
        sqlMap.endTransaction();
    } catch (SQLException e) {
        throw new XXXException(e);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...