Spring-Bootアプリケーション内で、永続コンテキストからエンティティを切り離す必要があります。Springデータリポジトリ(Spring 4)を使用している場合、永続コンテキストからエンティティを切り離す方法
私は、次のベースリポジトリがあります。
interface EntityRepository extends CrudRepository<Entity, Long>
は明らかにこれは、任意のdetach(..)
-operationを提供していませんが。 私は実際に私のために働いていない答えを見つけました: SO Post。
私は同じことをしようとしたが、それは私のエンティティが切り離されていないようだ(イムは、任意のフィールドを変更するかのように、それはまだ持続します)
カスタムレポ:
interface MyCustomEntityRepository {
void detach(Entity ent)
}
インタフェースのImpl:
class MyCustomEntityRepositoryImpl implements MyCustomEntityRepository{
@PersistenceContext
private EntityManager em;
public void detach(Entity ent) {
em.detach(ent);
}
}
しかし、これは、その結果として、私は、MyCustomEntityReposity
でEntityRepository
を拡張カント:
No property detach found for type Entity!
EntityRepositoryを拡張しないことで、エラーなくコンパイルできました。またchangin CrudRepository
〜JpaRepository
しかし、私のエンティティは分離されていませんが、リンク先のポストでは、QAはそれが彼/彼女のために働いていると言います。 オブジェクトをデタッチする実際の理由は、@EntityListener
内のいくつかのバリデーションを実行することです。デタッチする必要がある、現在変更されているエンティティインスタンスを使用して、dbに現在格納されているエンティティをチェックします。
誰かが何かエラーを見たり、手がかりを与えてくれますか?私は間違って何をしていますか?
使用:春ブーツ(1.4.0リリース)、春4を、JPA
を
これは一回限りの必要条件ですか、アプリケーション内のすべてのエンティティに対してこの機能を使用しますか? – manish
私は1つのエンティティに対してのみ必要ですが、一般的なアプローチにも興味があります – lunatikz
単一のエンティティのみの場合は、 '@PersistenceContext EntityManager entityManager;として' EntityManager'をautowireしてください。エンティティインスタンスを 'entityManager.detach(entity)'としてデタッチできます。これはカスタムコーディングを必要としないので簡単です。すべてのエンティティでこれが必要な場合は、[公式ドキュメント](http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.custom-behaviour-for-all-リポジトリ)のJPAリポジトリのカスタム動作を制御します。 'CrudRepository'を拡張してリポジトリに' detach'メソッドを含めることができます。 – manish