0

我正在我的 Spring Data JPA 存储库中进行更新本机查询。

@Query(nativeQuery=true, value="update t_table set change = 0 where id = ?1")
@Modifying(clearAutomatically=false)
void disableChange(int id);

正如我在数据库客户端中看到的那样,该值以正确的方式更新,但在重新部署服务器之前,下一个事务无法识别更改。

我的服务如下所示:

@Service("my.service.class.service")
public final class MyServiceClassImpl implements MyServiceClass 
{

    @Autowired
    private ClientRepository clientRepository;


    @Override
    @Secured("MY_ROLE")
    @Transactional(propagation=Propagation.REQUIRES_NEW, rollbackFor=MyException.class)
    public void myMethod() throws PlayTheGuruException 
    {
         //
         myMethod();
         //
    }

    private void myMethod() throws MyException {
         //
         clientRepository.disableChange(22);
         //
    }
}

我是否需要myMethod使用事务性和强制传播或类似的东西进行注释?

本机查询是问题吗?

此问题仅在更新查询时出现。

4

1 回答 1

1

如果为相关实体启用了 L2 缓存,则看起来像是来自 L2 缓存的陈旧值。

尝试手动从 L2 缓存中删除受影响的实体:

@Autowired EntityManagerFactory emf;

...

clientRepository.disableChange(22);
emf.getCache().evict(..., 22);
于 2013-09-09T18:31:58.180 回答