アプリケーションが高速である必要があるため、毎回 findById を使用してデータベースでそれらを検索する必要がないように、いくつかの単純なエンティティ Bean (EJB 3.1、Glassfish、EclipseLink) のアプリケーション内キャッシュがあります。これらのエンティティ Bean は読み取り専用です。
たとえば、エンティティ Bean の Country または Currency はローカル キャッシュにあります。
上記の単純な Bean (Country、Currency...) を使用する複雑なエンティティ Bean (つまり、Customer) を更新する Java EE アプリケーションのプロセスが発生します。
次に何が起こるかというと、JPA コンテキストへの単純エンティティ Bean の接続が失われるため、Customer Bean で .merge() が試行されると、JPA は単純エンティティ Bean を新しいレコードとしてデータベースに保存しようとしますが、これらは存在します。すでにデータベースに 100% 含まれているため、これは「切り離されたエンティティ」の問題だと思います。
例。
Country country = getFromCacheByName("GB"); // detached entity, but exists in database
Customer customer = getCustomerFromJPA(); // existing JPA attached entity
customer.setCountry(country);
EntityManager.merge(customer); // pseudo code
依存オブジェクト (国) を .merge() に保存しようとしないように、最後の行または Bean (顧客) 自体を修正する方法は?
ありがとうございました。