2016-12-15 5 views
0

私はすべてのデータベースクエリーがJPAで行われるアプリケーションを作成しました。私は1つの列を編集する方法を持っています。JPA問題を同期させ、アプリケーションを再起動する必要があります

public static void setReservationAsUnactive(Reservation obj) { 
    em.getTransaction().begin(); 

    obj.setActive(0); 
    obj.setReturnedDate(new Date()); 
    em.merge(obj); 

    em.getTransaction().commit(); 
} 

私は列が私のMySQLデータベースに正しく変更されていることを確認することができますが、私はしかし、変化がない照会JPAでそれを引き出してみますとき - 、私は、アプリケーションを再起動すると、変更が行われます...私は引き出したデータを保証するにはどうすればよいですか?あなたがキャッシュから

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

その他のソリューションをごオブジェクトを立ち退かせるために必要

答えて

0

フィードバックありがとうございます。しかし、私はそれを元の場所から取得してオブジェクトを取得することで解決しました。

例:

// this will work, and it will update the database, but the user need to restart his client to view the edited row 
public void btnSetReservationToUnactive() { 
    TableObject tableObject = getSelectedObject(); 
    ReservationBean.setReservationAsUnactive(ReservationBean.getReservationByID(tableObject.getID())); 

} 

// this method will update the current clients view also, because it get the object were it originally came from. 
// rather than getting a new object from the em. 
public void btnSetReservationToUnactive() { 
    TableObject tableObject = getSelectedObject(); 
    ReservationBean.setReservationAsUnactive(getReservationByIdFromTable(tableObject.getID())); 

} 

public Reservation getReservationByIdFromTable(int resID) { 
    for (Reservation res : customer.getReservationCollection()){ 
     if (res.getID() == resID) 
      return res; 
    } 

} 
1

であるあなたは、エンティティ・マネージャをキャッシュしている場合はご連絡ください!

関連する問題