在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();
由于我的声誉很低,我无法回答这个问题,所以我发布了这个已经回答过的问题,希望能够挽救别人的头脑。