2012-04-17 51 views
0
@PersistenceContext(unitName = "ServerLayerPU") 
    protected EntityManager m_entityManager; 

    m_entityManager.persist(entity); 
    m_entityManager.flush(); 

我想让我的新实体对象与已经提交给数据库的内容同步。我原本是在冲洗中,我认为解决了这个问题,但在更大的测试过程中问题再次出现。当这个实体被提交给db时,会触发另一个表/实体,并且我需要这个反映。我应该怎么做呢?休眠与我的数据库不同步

回答

0

当数据库触发器更改记录的状态时,这些更改不会反映在休眠会话的相应实例中。您必须使用session.refresh()以使用来自底层数据库的最新值更新这些实例。

1

flush()指示实体管理器检测对管理实体所做的所有更改,并将它们发送到数据库。它不会提交事务,也不会导致数据从数据库中重新读取。 (Hibernate如何知道重新读取哪些数据?你不希望它重新读取所有内容,以防止触发器修改了它插入的数据?)。

您可以使用refresh()重新读取一个实体。

+0

刷新有诀窍。我在徘徊什么是管理这种同步的适当方式。我不愿意用刷新语句来抛弃我的代码,只是为了保证我的实体对象具有最新的信息。 – skinnybrit51 2012-04-20 13:33:54