java - 如何使用 QueryDsl 正确创建 JPAQueryFactory
问题描述
我听说EntityManager
is not thread-safe,所以我们使用@PersistenceContext
而不是@Autowired
.
但是,我在网上找到了两种创建 JPAQueryFactory 的方法。
- 像这样定义一个bean
@Configuration
public class JPAQueryFactoryConfiguration {
@Bean
public JPAQueryFactory jpaQueryFactory(@Autowired EntityManager entityManager) {
return new JPAQueryFactory(entityManager);
}
}
- @PersistenceContext on EntityManager ,每次都新建 JPAQueryFactory(entityManager)
@Service
public class TestServiceImpl implements TestService {
@PersistenceContext
private EntityManager entityManager;
@Override
public void test(){
JPAQueryFactory jpaQueryFactory = new JPAQueryFactory(entityManager);
xxxxxxxxxxxx
}
}
我很困惑。但是,根据@PersistenceContext 和@Autowired 之间的区别,我认为第一种方法是不正确的
解决方案
我只是在 EJB 中比较大,JPAQueryFactory 的类型是 Provider 不是 EntityManager,只是 Cast
JPAQueryFactory query = new JPAQueryFactory((Provider<EntityManager>) em);
或者使用 JPAQueryFactory 的声明
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("com.baeldung.querydsl.intro");
EntityManager em = entityManagerFactory.createEntityManager();
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
推荐阅读
- android - 如何通过 android studio 中的 OTG 获取 USB 中存在的文件的创建/删除访问权限?
- akka-stream - 将流操作添加到 Sink
- reactjs - React/Redux AG Grid 未加载数据
- python - 将使用 slic 分割的图像转换为用于抓取
- apache - 代理配置和 Websocket 的问题
- amazon-web-services - 如何根据存储在 DynamoDB 中的日期发送 AWS SNS 移动 SMS 消息
- google-apps-script - 使用 Google Apps 脚本将 Google 表单问题添加到表单的特定部分
- selenium-webdriver - Selenium WebDriver 可以在我尝试登录时读取验证码吗?
- elasticsearch - 为什么即使我什么都不做(例如-h),logstash 的启动速度也很慢(1 分钟)
- python - Python:抓取 Selenium / 嵌套循环