在单个存储库中使用entityManager

时间:2017-07-06 11:13:54

标签: java database spring-data-jpa

我使用spring-data-jpa来访问我的数据。我需要一种方法来分离一个Object并将其存储为一个新的数据库行。我的方法目前是向存储库添加detach方法,但为此,我需要EntityManager。我还没有找到一种(好的)获得它的方法......任何想法?

@Repository
public interface InteractionRepository
        extends JpaRepository<Interaction, Long>,
                DetatchableItemRepository{}


public interface DetatchableItemRepository {
    void detach(Interaction clone);
}


public class DetatchableItemRepositoryImpl implements DetatchableItemRepository {

    @Autowired
    EntityManager em;

    public void detach(Interaction clone) {
        em.detach(clone);
        clone.id=null;
        em.persist(clone);

    }
}

然而,春天死了这个错误:

  • 由以下原因引起:org.springframework.beans.factory.BeanCreationException:创建名称为&#39; interactionRepository&#39;的init时出错:init方法的调用失败;嵌套异常是org.springframework.data.mapping.PropertyReferenceException:找不到类型Interaction的属性分离!

  • 引起:org.springframework.data.mapping.PropertyReferenceException:找不到类型Interaction的属性分离!

1 个答案:

答案 0 :(得分:0)

您对自定义存储库使用了错误的名称约定,请尝试以下操作:

    interface SomeRepositoryCustom{
       someMethod();
    }     
    //XXXRepository - any base spring data repository
    interface SomeRepository extends<T ,ID> extend XXXRepository , SomeRepositoryCustom {
         .......
    }

    public class ARepositoryImpl implement SomeRepositoryCustom{
      @Overide
      someMethod(){
        ....
    }

spring数据使用自定义存储库和主存储库的名称约定。(请参阅名称Adding custom behavior to single repositories

如果你有一些SomeRepository,它扩展了一些基础Spring数据存储库,并且想要添加自定义行为,那么它应该是:

{{1}}