如何使用spring boot和spring数据访问实体管理器

时间:2015-06-16 17:24:29

标签: spring-boot spring-data spring-data-jpa

当我们使用spring boot和spring数据时,如何访问存储库中的实体管理器?

否则,我需要将我的大查询放在注释中,我希望有一些清楚的东西......然后是长文本。

2 个答案:

答案 0 :(得分:14)

您可以定义CustomRepository来处理此类方案。假设您有CustomerRepository扩展了默认的spring数据JPA接口JPARepository<Customer,Long>

使用自定义方法签名创建新接口CustomCustomerRepository

public interface CustomCustomerRepository {
    public void customMethod();
}

使用CustomerRepository

扩展CustomCustomerRepository界面
public interface CustomerRepository extends JpaRepository<Customer, Long>, CustomCustomerRepository{

}

创建一个名为CustomerRepositoryImpl的实现类,它实现CustomerRepository。您可以在此处使用EntityManager注入@PersistentContext。命名约定在这里很重要。

public class CustomerRepositoryImpl implements CustomCustomerRepository {

    @PersistenceContext
    private EntityManager em;

    @Override
    public void customMethod() {

    }
}

答案 1 :(得分:-2)

如果要处理的存储库很多,并且EntityManager中的需求不是特定于任何特定存储库的,则可以在单个帮助器类中实现各种EntityManager功能,也许有些像这样:

@Service
public class RepositoryHelper {

    @PersistenceContext
    private EntityManager em;

    @Transactional
    public <E, R> R refreshAndUse(
            E entity,
            Function<E, R> usageFunction) {
        em.refresh(entity);
        return usageFunction.apply(entity);
    }

}

这里的refreshAndUse方法是一种示例方法,用于消耗分离的实体实例,对其进行刷新,并返回在声明式事务上下文中将自定义函数的结果应用于刷新后的实体的方法。您还可以添加其他方法,包括查询方法...

注意演示代码在收到第一个无声downvote时得到了简化。仍然鼓励进一步的投票者(如果有的话)花一分钟时间至少发表评论,因为默默投票是否有意义? :)