Multithreading 如何在多线程环境中使用EntityManager
我在SpringBoot应用程序中使用CriteriaAPI。如果我对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
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;