2010-08-05 43 views
1

時,我有一個會話bean提供的商業方法,其中創建若干個CMP實體bean,像這樣是EJB 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(); 
    } 
} 

MyBean的製作方法簡單地創建一個新豆與newID。但是,上述代碼僅適用於number = 1。如果number > 1,它嘗試創建具有相同ID的第二個bean(System.out.println(newID);打印相同的值)。我猜新bean尚未存儲在數據庫中,因此查詢返回相同的值。對此可以做些什麼?

非常感謝!

回答

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