私は現在Hibernateを学習していますが、この問題に遭遇しました。ユーザー、モジュール、権限の3つのエンティティを定義しました。ユーザーとモジュールの両方がPermissionと1対多の関係にあるため、Permissionの複合IDはidUserとidModuleで構成されます。ユーザークラスには、パーミッションのセットであるプロパティがあり、@ OneToMany、cascade=CascadeType.ALLなどで適切に注釈が付けられています。
ここで、MyEclipseのリバースエンジニアリング機能を使用してクラスを生成しました。権限のIDは、idUserプロパティとidModuleプロパティを持つ個別のクラスとして作成されました。ユーザーを作成し、それにいくつかの新しいアクセス許可を追加できると思いました。したがって、ユーザーを保存すると操作がカスケードされ、アクセス許可が自動的に保存されます。これは、操作によって例外が発生することを除いて当てはまります。次のコードを実行します。
Permission p = new Permission();
p.setId(new PermissionId(null, module.getId());
user.getPermissions().add(p);
session.save(user);
私が抱えている問題は、SQLが正しく生成されていても(最初にユーザーを保存し、次にアクセス許可を保存する)、データベースドライバー(Firebird)からエラーが発生し、idUserにnull値を挿入できないことを示しています。 trueですが、休止状態で新しく作成されたユーザーIDを2番目のクエリに渡す必要はありませんか?
この特定のシナリオは、Null IDを新しいもので作成したいのでPermissionオブジェクトに渡す傾向があるため、非常に直感に反しますが、その一方で、idModuleプロパティを設定する必要があります。モジュールはすでに存在しているので、このような操作がどのように機能するのかよくわかりません。
誰かが私が間違っていることを知っていますか?ありがとう