EnityManager を使用してオブジェクトを削除する際に問題があります。名前のようなパラメーターがあります。ユーザーにこのパラメーターを追加してから削除すると、正常に機能します。ただし、EntityManager は削除されたパラメーターの ID を記憶します (ID は主キー - 自動インクリメント)。そして、ユーザーにこのパラメーターをもう一度追加すると、EntityManager はデータベースに行を追加しますが、最初の persit() の ID を保持します。したがって、パラメーター値をもう一度削除すると、EM はパラメーターを削除しません。EM は最初のパラメーターの ID を記憶しているため、この ID を持つパラメーターはありません。
私のソースコードは次のとおりです。
if (!param.isParameterFilled()) {
if (param.getId() != null) {
param = getEmGap().merge(param);
getEm().remove(param);
getEm().flush();
}
return;
}
if (param.getId() == null) {
getEm().persist(param);
} else {
getEm().merge(param);
}
getEm().flush();
}
おそらく問題は条件に関連しています: if(param.getId() == null) - この場合 (最初に追加して削除した後) id != null - > しかし、DB には EM が認識している id を持つパラメータはありません。そして、私はこの問題を解決する方法がわかりません。この場合、EMがどのように機能するかわかりませんか?remove() および flush() が呼び出された後、EM は Id = null を設定する必要があります。それとも、persist() と flush() でパラメータの ID をリロードする必要がありますか?
ありがとう