当我们使用spring boot和spring数据时,如何访问存储库中的实体管理器?
否则,我需要将我的大查询放在注释中,我希望有一些清楚的东西......然后是长文本。
答案 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时得到了简化。仍然鼓励进一步的投票者(如果有的话)花一分钟时间至少发表评论,因为默默投票是否有意义? :)