Когда EJB-объект EJB CMP фактически создан

У меня есть сессионный компонент, который предоставляет бизнес-метод, в котором он создает несколько объектов CMP, что-то вроде этого

public void businessMethod(int number) {
    try {
        MyBeanHome home = lookupMyBean();
        DataSource dataSource = getMyDataSource();
        Statement statement = dataSource.getConnection().createStatement();
        ResultSet result;
        String tableName = "MYBEAN";
        for (int i = 0; i < number; i++) {
            result = statement.executeQuery("select max(ID) + 1 from " + tableName);
            result.next();
            int newID = result.getInt(1);
            System.out.println(newID);
            MyBeanLocal lineLocal = home.create(newID);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

Метод создания MyBean просто создает новый бин с newID, Однако приведенный выше код работает только с number = 1, Если number > 1пытается создать второй компонент с тем же идентификатором (System.out.println(newID); печатает то же значение). Я предполагаю, что новый компонент еще не сохранен в базе данных, и, следовательно, запрос возвращает то же значение. Что с этим можно сделать?

Большое спасибо!

1 ответ

Решение

Я понял, что транзакция выполняется только тогда, когда бизнес-метод завершается, поэтому первые сущностные компоненты не будут храниться в базе данных для извлечения. Простое решение ниже

public void businessMethod(int number) {
    try {
        MyBeanHome home = lookupMyBean();
        DataSource dataSource = getMyDataSource();
        Statement statement = dataSource.getConnection().createStatement();
        ResultSet result;
        String tableName = "MYBEAN";
        result = statement.executeQuery("select max(ID) + 1 from " + tableName);
        result.next();
        int newID = result.getInt(1);
        for (int i = 0; i < number; i++) {
            System.out.println(newID);
            MyBeanLocal lineLocal = home.create(newID++);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
Другие вопросы по тегам