如果使用Spring Data Repositories(Spring 4),如何从持久化上下文中分离实体

时间:2016-10-13 16:33:37

标签: java spring jpa spring-data-jpa detach

我需要在spring-boot应用程序中从持久化上下文中分离实体。

我有以下基础存储库:

interface EntityRepository extends CrudRepository<Entity, Long> 

显然这不提供任何detach(..) - 操作。 我找到了答案,实际上对我不起作用: SO Post

我尝试了同样的方法,但似乎我的实体没有分离(就像我改变任何字段一样,它仍然保持不变)

自定义回购:

interface MyCustomEntityRepository {
  void detach(Entity ent)
}

Interface Impl:

class MyCustomEntityRepositoryImpl implements MyCustomEntityRepository{
     @PersistenceContext
     private EntityManager em;

     public void detach(Entity ent) {
         em.detach(ent);
     }
}

但是我无法将EntityRepository延伸到MyCustomEntityReposity,因为这会导致:

No property detach found for type Entity! 我设法通过不扩展EntityRepository来编译而没有错误。同时将CrudRepository改为JpaRepository 但是我的实体仍然没有脱离,但在链接的帖子中,QA说,它对他/她有用。 分离对象的实际原因是,能够在@EntityListener内执行一些验证,方法是检查db中当前存储的实体,以及当前已更改的实体实例,该实体应该被分离。

有没有人看到一些错误或给我一些线索,我做错了什么?

使用:Spring-boot(1.4.0-release),Spring 4,JPA

1 个答案:

答案 0 :(得分:1)

  

有没有人看到一些错误或给我一些线索,我做错了什么?

虽然很难分辨,但实际问题可能是什么,以及什么只是草率的问题编辑。

  1. 您的界面无法编译

    interface MyCustomEntityRepository {
       detach(Entity ent)
    }
    

    应该是

    interface MyCustomEntityRepository {
       void detach(Entity ent)
    }
    
  2. 您的自定义界面的实现应实现界面:

    class MyCustomEntityRepositoryImpl {
    

    应该是

    class MyCustomEntityRepositoryImpl implements MyCustomEntityRepository {
    
  3. 如果问题仍然存在,请显示您使用的实际代码以及实际异常,包括堆栈跟踪。