我正在使用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);
}
任何人都可以告诉我什么原因是什么是不起作用的。在XML文件中,我还将事务管理器配置为
<bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
任何人都可以帮助我如何在同一交易中获得更新排名实体。
您不能从同一交易中测试READ_UNCOMMITTED
。
您试图测试的方法是行不通的,而是出于不同的原因。如果您试图使用EntityManager#find()
检索,则可以从 1st Cache 中取回结果,该结果在没有DB圆形往返的情况下存储了您尚未访问的更改。第一级缓存无法通过查询工作。
so:
- 如果您想存储和阅读相同的交易,则不需要
READ_UNCOMMITTED
。只需将您的检索更改为EntityManger#find()
或Session#load()
即可从第一级缓存
获取它 - 如果确实需要
READ_UNCOMMITTED
修改涉及多个交易的测试。