gpt4 book ai didi

java - 事务隔离 READ UNCOMMITTED 不起作用

转载 作者:行者123 更新时间:2023-11-30 02:24:46 27 4
gpt4 key购买 nike

我正在使用 hibernate 进行数据库连接。现在我需要读取未提交的事务隔离,但它对我不起作用。请任何人帮助我是什么原因,我已经使用了这段代码:

@org.springframework.transaction.annotation.Transactional( 
isolation =Isolation.READ_UNCOMMITTED)
public addRank(){
//here i want to change status of rank corresponding rank id 1 so i called private mthoed addChangeStatus with id 1
addChangeStatus(1);
//here i want to get rank with id and status true but i got null
}

private addChangeStatus( int rankId ){
// first get rank entity from database using given id
Rank rank = dao.getRankById("query");
//set status of rank true here
rank.status(true);
}

在dao中getRankById方法

Query getRankById(String query){
//get currentSession from session factory
getCurrentSession().getNamedQuery(queryName);
}

谁能告诉我未提交的 read 不起作用的原因是什么。在 xml 文件中,我还将事务管理器配置为

<bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

任何人都可以帮助我如何在同一交易中获取更新排名实体。

最佳答案

您无法从同一事务测试 READ_UNCOMMITTED

您尝试在那里测试的内容不起作用,但原因不同。如果您尝试使用 EntityManager#find() 进行检索,您将从存储尚未保留的更改的一级缓存中获取结果,而无需使用DB 往返。一级缓存无法通过查询运行。

所以:

  1. 如果您想在同一事务中存储和读取,则不需要 READ_UNCOMMITTED。只需将您的检索更改为 EntityManger#find()Session#load() 即可从一级缓存中获取它
  2. 如果您确实需要READ_UNCOMMITTED,请修改涉及多个事务的测试。

关于java - 事务隔离 READ UNCOMMITTED 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45935631/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com