我想要实现的是,我想在 select 语句中执行无锁查询。但是根据这个答案,通过直接 JPA 实现是不可能实现的。我也从搜索中了解到,nolock
并且READ_UNCOMMITTED
是相同的。有没有办法通过修改我的下面的代码来实现这个(无锁,READ_UNCOMMITTED)。或者我应该使用本机查询并指定WITH(NOLOCK)
我试过
entityManager.createQuery(query).setLockMode(LockModeType.NONE).getResultList();
但它也没有解决我的问题。
我正在使用以下代码从表中获取数据。这段代码没有锁就可以正常工作。
String query = "FROM Employee WHERE empId=:empId AND empStatus='failed'";
从数据库中获取数据
public Object getListFromQuery(String query) throws Exception {
Object resultObject = null;
List<Object> queryResultList = null;
EntityManager entityManager = null;
try {
entityManager = entityManagerFactory.createEntityManager();
queryResultList = entityManager.createQuery(query).getResultList();
resultObject = (Object) queryResultList;
} catch (Exception ex) {
LOGGER.error("Exception : DatabaseManager :executeQueryGetList ",ex);
throw ex;
} finally {
entityManager.close();
}
return resultObject;
}
数据库配置
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory()
throws NamingException {
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource());
factoryBean
.setPackagesToScan(new String[] { "com.test.middleware.entity" });
factoryBean.setJpaVendorAdapter(jpaVendorAdapter());
factoryBean.setJpaProperties(jpaProperties());
factoryBean.setPersistenceUnitName("test_unit");
return factoryBean;
}