Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 事务未及时检索数据_Oracle_Jpa_Jakarta Ee_Transactions_Persistence - Fatal编程技术网

Oracle 事务未及时检索数据

Oracle 事务未及时检索数据,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

我有一个有很多服务的项目。我在我的项目中使用纯jpa和jersey

我以这种方式使用entityManager、entityTransaction和entityManager工厂:对于每个服务,我从DBManager.getEntityManager()获得entityManager,并从其entityManager获得get和entityTransaction

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