когда объект EJB CMP фактически создан - PullRequest
1 голос
/ 05 августа 2010

У меня есть сессионный компонент, предоставляющий бизнес-метод, в котором он создает несколько объектов 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();
    }
}

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

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

1 Ответ

1 голос
/ 09 августа 2010

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

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();
    }
}
...