0

我想要实现的是,我想在 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;
}
4

0 回答 0