JPA Cache:在视图中的表更新后,如何从db视图获取更新结果

时间:2017-04-11 21:25:36

标签: jpa caching model-view-controller views mariadb

在db(mariadb)中,我将视图定义为来自多个表的连接的数据选择:

    CREATE VIEW `obiettivideco` AS 
    SELECT 
      `codici`.`id` AS  `idc`,
      `codici`.`codice` AS `codice`,
      `codici`.`sub` AS `sub`,
      `codici`.`descrizione` AS `descrizionec`,
      `eo`.`id` AS `ide`,
      `eo`.`Descrizione` AS `descrizionee`,
      `obiettivi`.`id` AS `ido`,
      `obiettivi`.`inizio` AS `inizio`,
      `obiettivi`.`fine` AS `fine`,
      `obiettivi`.`valore` AS `valore` 
    FROM (
      (`obiettivi` JOIN `eo` 
      ON((`obiettivi`.`eo` = `eo`.`id`))) JOIN `codici` 
      ON((`obiettivi`.`codice` = `codici`.`id`))
);

在该层之上,我从表(以及从视图中)生成实体,以便获得MVC模式的模型。 然后在使用一些托管bean创建的Controller中,我编写了一些逻辑,使视图(JSF)能够显示上述视图的选择。 当必须修改数据时,在表实体的帮助下保持更改(例如

        em.getTransaction().begin();
        em.persist(obiettivo);
        em.getTransaction().commit();

其中obiettivo是Class Obiettivi的一个对象,而Obiettivi又是对obiettivi表进行建模的实体。 如果我试图显示obiettivideco选择的更新,就会出现问题:jpa缓存似乎没有意识到obiettivo的变化也会使obiettivideco过时。

我花了几天时间才找到与实体管理员刷新相关的this answer来解决我的问题:

    q.setHint(QueryHints.REFRESH, true);
    obiettivideco = (List<Obiettivideco>) q.getResultList();

由于我的声誉很低,我无法回答这个问题,所以我发布了这个已经回答过的问题,希望能够挽救别人的头脑。

0 个答案:

没有答案