2016-12-15 2 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);

Пожалуйста, сообщите, если вы кэширования диспетчер сущностей?

Смежные вопросы