Multithreading 如何在多线程环境中使用EntityManager

Multithreading 如何在多线程环境中使用EntityManager,multithreading,entitymanager,hibernate-entitymanager,Multithreading,Entitymanager,Hibernate Entitymanager,我在SpringBoot应用程序中使用CriteriaAPI。如果我对EntityManager的看法正确,那么它不是线程安全的 我有进一步的回购设计: @Repository @AllArgsConstructor public class CustomerRepositoryImpl implements CustomerRepository { private final SessionFactory sessionFactory; @Override publ

我在SpringBoot应用程序中使用CriteriaAPI。如果我对
EntityManager
的看法正确,那么它不是线程安全的

我有进一步的回购设计:

@Repository
@AllArgsConstructor
public class CustomerRepositoryImpl implements CustomerRepository {

    private final SessionFactory sessionFactory;

    @Override
    public Optional<Customer> findById(final long customerId) {
        final EntityManager entityManager = sessionFactory.createEntityManager();
        final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        final CriteriaQuery<Customer> criteriaQuery = criteriaBuilder.createQuery(Customer.class);
        final Root<Customer> customerMetamodel = criteriaQuery.from(Customer.class);
        criteriaQuery.where(criteriaBuilder.equal(customerMetamodel.get("id"), customerId));
        final TypedQuery<Customer> query = entityManager.createQuery(criteriaQuery);
        final Customer singleResult = query.getSingleResult();
        entityManager.close();
        return Optional.ofNullable(singleResult);
    }

    // Bunch of a similar methods like a CRUD and getList()
} 
但我不明白如何将非thred安全对象变成线程安全的。代理包装
EntityManager
到原子包装和锁定逻辑?我非常怀疑

使用
EntityManager
设计存储库的写入方式是什么

@PersistenceContext
private EntityManager entityManager;