2016-12-15 106 views
0

我已经创建了一个应用程序,我的所有数据库查询都使用JPA完成。我有一个方法,我编辑一列,下面添加代码;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查询的变化是不存在的,但是 - 当我重新启动应用程序时,进行更改...我如何确保我提取的数据是新数据,而不是某些缓存?

回答

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

尝试通过em.refresh(obj);

请告知,如果你正在缓存的实体管理器从底层数据库中获得你的实体?