1

ビジネス メソッドを提供するセッション Bean があります。このメソッドでは、次のようないくつかの CMP エンティティ Bean が作成されます。

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、 で新しい Bean を作成するだけnewIDです。ただし、上記のコードはnumber = 1. の場合number > 1、同じ ID を持つ 2 番目の Bean を作成しようとします (System.out.println(newID);同じ値を出力します)。新しい Bean はまだデータベースに保存されていないため、クエリは同じ値を返していると思います。これには何ができますか?

どうもありがとう!

4

1 に答える 1

1

トランザクションはビジネスメソッドが終了したときにのみ実行されるため、最初のエンティティBeanは取得のためにデータベースに保存されないことがわかりました。簡単な解決策は以下のとおりです

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();
    }
}
于 2010-08-09T16:14:19.177 に答える