Oracle 事务未及时检索数据
我有一个有很多服务的项目。我在我的项目中使用纯jpa和jersey 我以这种方式使用entityManager、entityTransaction和entityManager工厂:对于每个服务,我从DBManager.getEntityManager()获得entityManager,并从其entityManager获得get和entityTransactionOracle 事务未及时检索数据,oracle,jpa,jakarta-ee,transactions,persistence,Oracle,Jpa,Jakarta Ee,Transactions,Persistence,我有一个有很多服务的项目。我在我的项目中使用纯jpa和jersey 我以这种方式使用entityManager、entityTransaction和entityManager工厂:对于每个服务,我从DBManager.getEntityManager()获得entityManager,并从其entityManager获得get和entityTransaction public class DBManager { public static EntityManager getEntityM
public class DBManager {
public static EntityManager getEntityManager() {
return Persistence.createEntityManagerFactory("projectDataSource").getEntityManager();
}
在每个需要事务的方法中,首先我检查transaction!=空
且事务未激活
然后我开始交易
我退出缓存,然后完成我的工作:在本例中,我从数据库中获取所有活动用户,并将用户列表返回给客户端
我的一项服务是:@getUsersService
public class GetUsersServiceImpl {
private static EntityManager entiyManager = DBManager.getEntityManager();
private static EntityTransaction entityTransaction = entityManager.getTransaction();
public List<User> getUsers()
if (transaction != null && !transaction.isActive())
transaction.begin()
entityManager.getEntityMangerFactory().getCache().evictAll();
return entityManger.createQuery("SELECT u FROM USER u WHERE u.isActive = true").getResultList();
}
公共类GetUsersServiceImpl{
私有静态EntityManager EntityManager=DBManager.getEntityManager();
私有静态EntityTransaction EntityTransaction=entityManager.getTransaction();
公共列表getUsers()
if(transaction!=null&&!transaction.isActive())
事务处理。开始()
entityManager.GetEntityRangerFactory().getCache().ReceictAll();
返回entityManger.createQuery(“从用户u中选择u,其中u.isActive=true”).getResultList();
}
这段代码有效,但并不总是有效
我有另一项服务,改变用户;该用户还可以工作并更改数据库中的用户数据,但在调用getUsers服务时调用change service之后,它会检索旧的数据库数据
为什么会发生这种情况
我使用entityManager和entityTransaction的方式是否正确…为什么不调试它,查看JPA提供商的日志,然后您可以看到它从何处获取数据。。。缓存或数据库。@BillyFrost当我在系统中调试我的应用程序时,它工作正常,但当我在服务器中部署war文件时,会发生此错误。但问题是查询检索数据库中当前不存在的旧数据。如果查询转到数据库,则它不会检索数据库中不存在的数据。所以我最后一次对你说,调试你的应用程序,并在日志中查看它从何处获取数据。@BillyFrost另一个问题:我是否在我的每个服务上使用静态entityManger