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

How to access entity manager with spring boot and spring data

在使用 Spring 引导和 Spring 数据时,如何访问存储库中的 Entity Manager

否则,我需要将我的大查询放在注释中。我希望有比长文本更清晰的内容。

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

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

public interface CustomCustomerRepository {
    public void customMethod();
}

使用 CustomCustomerRepository

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

}

创建名为 CustomerRepositoryImpl 的实现 class,它实现了 CustomerRepository。在这里你可以使用 @PersistentContext 注入 EntityManager。命名约定在这里很重要。

public class CustomCustomerRepositoryImpl implements CustomCustomerRepository {

    @PersistenceContext
    private EntityManager em;

    @Override
    public void customMethod() {
    
    }
}

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

@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 方法是一个示例方法,用于使用分离的实体实例,为其执行刷新,并且 return 将自定义函数的结果应用于刷新的实体声明性事务上下文。您也可以添加其他方法,包括查询方法...

注意 演示代码在收到第一个无声反对票后得到简化。仍然鼓励更多的反对者(如果有的话)花一分钟时间至少发表一行评论,因为沉默的反对票有什么意义吗? :)