team、player、team_player の 3 つのテーブルがあるとします。テーブル team_player は、「多対多」の関係を可能にするブリッジ テーブルです。
誰かが新しいチームを作成したい場合、そのチームの最初のプレーヤーを指定します。
team と team_player の両方の行を同じトランザクションに挿入するにはどうすればよいですか? つまり、新しいチーム行にコミットする前に、すべての team_player レコードを挿入したいと考えています。JDBC と Oracle を使用しています。
以下のコードを試してみると、team.id が数字 (トリガーによってインクリメントされる) であっても、teamId は文字列で埋められます。したがって、これは挿入しようとしたレコードの ID ではないようです (ただし、まだコミットしていません)。
c = DB.getConnection();
c.setAutoCommit(false);
sql = "INSERT INTO team (name) values (?)";
myInsert = c.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
myInsert.setString(1, "cougars");
int affectedRows = memoInsert.executeUpdate();
String teamId;
ResultSet generatedKeys = myInsert.getGeneratedKeys();
if (generatedKeys.next()) {
teamId = generatedKeys.getString(1);
}
// ...loop through players inserting each player and team.id into team_player
// c.commit();
これは、RETURN_GENERATED_KEYS: How to get the insert ID in JDBC?について読んだ場所 です。