如何使用 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 将自定义函数的结果应用于刷新的实体声明性事务上下文。您也可以添加其他方法,包括查询方法...
注意 演示代码在收到第一个无声反对票后得到简化。仍然鼓励更多的反对者(如果有的话)花一分钟时间至少发表一行评论,因为沉默的反对票有什么意义吗? :)
在使用 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 将自定义函数的结果应用于刷新的实体声明性事务上下文。您也可以添加其他方法,包括查询方法...
注意 演示代码在收到第一个无声反对票后得到简化。仍然鼓励更多的反对者(如果有的话)花一分钟时间至少发表一行评论,因为沉默的反对票有什么意义吗? :)