0

学校のプロジェクトでは、EJB セッション Bean を使用しています。この EJB は、追加、削除、変更、findAll、findbyId などの単純なサービスを提供します。このようなメソッドは、hibernate 4.0 (追加 -> saveOrUpdate、変更 -> saveOrUpdate...) を使用して実装され、クライアントで使用できます。

ゲーム(ID、説明、カテゴリ)とカテゴリ(ID、タイトル)の2つのクラスがあります。カテゴリにはゲームのセットもあります。ID は ID ジェネレーターを使用して生成されます。使用されるデータベースは mysql です。

クライアントでは、アプリケーション ユーザーがゲームに関する情報 (説明とカテゴリ) を入力するためにフォームが使用されます。コントローラでは、findById メソッドを使用して、ユーザーが選択したカテゴリを取得します。次に、このカテゴリで新しいゲームを作成し、保存します (SaveOrUpdate を使用)

最初に気付いた問題: ID は EJB で正しく生成され、渡されたゲームは変更されますが、クライアントではゲームに ID がありません (クライアントと EJB の間でオブジェクトを渡すのは参照によるものではないと思います)。誰かそれを確認しますか?

2 番目の問題: ゲームの保存時に、このゲームをカテゴリのセットに追加して、このカテゴリを更新しようとしました (saveOrUpdate も使用)。例外 org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session が発生しましたが、これは理解できません

誰でも私を助けることができますか?

4

1 に答える 1

0

最初の質問については、ID がクライアントに送り返されていないか、コントローラーに保存されていないようです。これを URL に追加することでクライアントに送り返すことができます。つまり、クライアント呼び出しからの戻り値に "?id=" + newGameId を追加します。

これにより、id フィールドのセッターとゲッターを使用して値をコントローラーに戻すことができます。

long id;
于 2013-04-09T18:31:23.847 に答える