好吧,我在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没有问题吗?这是更好的选择吗?
答案 0 :(得分:0)
在我看来,对所有flush
使用clear
和saves
并不是最佳选择 - 在这种情况下缓存的目的是什么。
我会实施
em.getEntityManagerFactory().getCache().evict(theSpecialClass, thePrimaryKey);
for bean instanceOf theSpecialClass