2013-08-25 45 views
-1

我的web應用程序使用hibernate mysql。我可以將記錄添加到數據庫中而不會有任何問題。但是,如果我要更新最新添加記錄它不會更新。但是,如果我重新啓動服務器(tomcat),然後嘗試更新它的工作。Hibernate表更新錯誤

要更新記錄,應滿足以下條件。

//Check record aready exist 
public boolean idExists(String id) { 
Session session = (Session) HibernateUtil.getSessionFactory().getCurrentSession(); 
session.beginTransaction();   
List<Officer> list = (List<Officer>) session.createQuery("from Officer as p where p.idno =" + "\'" + id.trim() + "\'").list(); 

return (list.size() > 0) ; 
} 

即時(返回1)添加記錄它將返回0.但一個重新啓動服務器並更新記錄它將工作。我也在添加記錄後驗證它已成功提交給數據庫。

public class HibernateUtil { 
private static final SessionFactory sessionFactory; 

static{ 
try{ 
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); 
}catch(Throwable ex){ 
System.err.println("Initial SessionFactory creation failed." + ex); 
throw new ExceptionInInitializerError(ex); 
} 
} 

public static SessionFactory getSessionFactory() { 
return sessionFactory; 
} 
} 

讓我知道如果我的代碼有問題嗎?

回答

0

您可以嘗試flush會話。實體不會立即保存到數據庫中。

session.flush(); 
+0

我想我的回答也一樣嗎? – commit

+0

@commit,是的。同樣的,但這個是簡潔的。 +1從我身邊。 –

+0

你真的覺得我需要那個嗎?這並不重要,而是關於你的形象,你是如何在這裏獲得的,不應該像之前發佈的那樣回答。這裏什麼都歡迎。 – commit

1

Hibernate不交易後立即與數據庫進行交互或者它在沖洗會議的時間,它管理並更新其記錄以提高系統性能以自己的方式,如果你想直接反射使用:

session.flush(); 

更新記錄後。

0

我覺得你在這裏使用Transactions更好。

你把session.biginTranasaction();

而是做這樣的事情,

public boolean idExists(String id) { 
Session session = (Session) HibernateUtil.getSessionFactory().getCurrentSession(); 
Transaction tx = session.beginTransaction();   
List<Officer> list = (List<Officer>) session.createQuery("from Officer as p where p.idno =" + "\'" + id.trim() + "\'").list(); 

tx.commit(); 
if(session != null){ 
session.close(); 
} 
    return (list.size() > 0) ; 
    } 

在另一端,你應該產生新的會話,並做其他的東西。

+0

Thx這對我來說工作得很好。 – user1741249