0

「親」と「子」の2つのエンティティがあり、カスケード属性が「すべて」に設定された双方向の1対多の関係を介してリンクされています。以下のコードを使用してChildオブジェクトをParentchildrenコレクションに追加すると、トランザクションをコミットするまで、永続化された子のIDを取得できません。

Parent p = (Parent) session.load(Parent.class, pid);
Child c = new Child();
p.addChild(c);
// "c" hasn't an ID (is always zero) 

ただし、session.save()メソッドを明示的に呼び出して子エンティティを永続化すると、トランザクションがコミットされていない場合でも、IDが作成され、すぐに設定されます。

Child c = new Child();
session.save(c);
// "c" has an ID

session.save()メソッドを呼び出さずに子エンティティのIDをすぐに取得する方法はありますか?

ありがとう

4

1 に答える 1

1

これは、実際には使用するIDスキームによって異なります。

自動インクリメントフィールド(MySQL、SQL Serverなど)を使用する場合、エンティティが保存されるまでIDは作成されません。

シーケンス(Oracleなど)を使用する場合、IDはエンティティが永続化されるときに作成されます。

その場合、自動インクリメントフィールドがあると仮定します。その場合、答えは次のようになります。いいえ、IDを永続化せずに取得することはできません。そうは言っても、ほとんどの場合、実際にはそのIDは必要ありません。他のエンティティとの関係は暗黙的に処理されます。では、ある種のURLパラメータまたはフォームフィールドのIDが必要だと思いますか?いずれにせよ、はい、それを保存する必要があります。

于 2010-04-07T02:46:52.627 に答える