技術: EJB 3.1,JSF的JBoss 7.1.1的數據是不是最新的(EJB 3.1,HibernatePersistence)
沒有與工作CRUD項目。 問題:
在一個瀏覽器中,打開具有實體列表的表。 另一個也是。每張表都是最新的。 一個實體被編輯並保留。在DB中,我們可以看到正確的數據狀態。
在另一個瀏覽器中,我們進行刷新和重新加載數據,但沒有最後一次更改。 屏幕上顯示的是以前的數據(數據不是最新的)。 但登錄/註銷後,我們可以看到最後編輯的數據(數據是最新的)。
我認爲原因是JPA緩存。
我需要建議如何在當前會話期間從數據庫獲取實際數據。
Pesistense.xml
<persistence-unit name="MyEntityManager">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/MydataSource</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.dialect"value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
<property name="hibernate.connection.autocommit" value="true"/>
<property name="hibernate.connection.characterEncoding" value="utf8"/>
<property name="hibernate.c3p0.min_size" value="5"/>
<property name="hibernate.c3p0.max_size" value="20"/>
<property name="hibernate.c3p0.timeout" value="1800"/>
<property name="hibernate.c3p0.max_statements" value="50"/>
</properties>
</persistence-unit>
DAO -class
@Named("userDao")
@Stateful
@TransactionManagement(TransactionManagementType.BEAN)
public class UserDaoBean implements UserDAO, Serializable {
private static final long serialVersionUID = -2486674295685504650L;
@PersistenceContext(name = "MyEntityManager", type = PersistenceContextType.EXTENDED)
private EntityManager em;
private User getUser(String user) {
try {
return (User) em.createNamedQuery(Queries.GET_User).setParameter("User", user.No).getSingleResult();
} catch (NoResultException ex) {
return null;
}
}
@Override
public void addUser(User user) throws Exception {
em.persist(user);
em.flush();
}
@Override
public void update(User user) throws Exception {
User tmpUser = getUser(user.getUser());
if (tmpUser == null) {
addUser(user);
return;
}
tmpUser.setUser(user.getUser());
tmpUser.setUsere(user.getUser());
em.persist(tmpUser);
em.flush();
}
我試圖增加額外的
userTransaction.begin();
//removal or updating
userTransaction.commit();
和em.flush();
但doen't工作。
提前致謝!
其工作:) 非常感謝! – Olga
在stackoverflow中表示感謝將答案標記爲正確的答案。 – JMelnik