在每次持续或合并后使用flush和clear

时间:2013-12-26 23:57:04

标签: java hibernate jpa

好吧,我在postgreSQL中有一个触发器函数,每次插入一个新行时都会生成一个数字。但JPA / Hibernate在“entityManager.persist(bean)”之后不显示此生成的数字。所以我做了以下强制它:

@Transactional(readOnly = true, propagation = Propagation.REQUIRED)
    public AbstractBean save(AbstractBean bean) {
        try {
            logger.info("Salvando Bean " + bean.getClass().getName());
            entityManager.persist(bean);
            entityManager.flush();
            entityManager.clear();
            return bean;
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("Ocorreu um erro ao tentar salvar. MSG ORIGINAL: "
                    + e.getMessage());
            throw new DAOException("Ocorreu um erro ao tentar salvar");
        }
    }

我在持久化方法后插入了“刷新并清除”,一切都很好。但我最大的疑问是:我的方法“save”被调用所有应用程序来保存任何JavaBean,所以如果我在所有持久化或合并中使用flush和clear没有问题吗?这是更好的选择吗?

1 个答案:

答案 0 :(得分:0)

在我看来,对所有flush使用clearsaves并不是最佳选择 - 在这种情况下缓存的目的是什么。

我会实施

em.getEntityManagerFactory().getCache().evict(theSpecialClass, thePrimaryKey);

for bean instanceOf theSpecialClass