我真的不知道在我的問題在於,正如我在,我不會有太多的經驗兩個方面我嘗試:JPA及期貨(使用播放框架的工作和承諾!)。如何刷新未來的實體?
我有下面的代碼位,我想從另一個HTTP請求返回一個會議對象,當這個對象的領域之一,被賦予了價值,由另一個線程。以下是我有:
Promise<Meeting> meetingPromise = new Job<Meeting>() {
@Override
public Meeting doJobWithResult() throws Exception {
Meeting meeting = Meeting.findById(id);
while (meeting.bbbMeetingId == null) {
Thread.sleep(1000);
meeting = meeting.refresh(); // I tried each of these
meeting = meeting.merge(); // lines but to no avail; I
meeting = Meeting.findById(id); // get the same result
}
return meeting;
}
}.now();
Meeting meeting = await(meetingPromise);
正如我在評論中指出,有三條線在那裏,其中任何一個,我認爲應該讓我從數據庫中刷新我的對象的內容。從調試器看來,這些調用刷新了多對一關係,但單個值不是。
我Meeting
對象擴展播放!框架的模式,爲方便起見,這裏是refresh
方法:
/**
* Refresh the entity state.
*/
public <T extends JPABase> T refresh() {
em().refresh(this);
return (T) this;
}
和merge
方法:
/**
* Merge this object to obtain a managed entity (usefull when the object comes from the Cache).
*/
public <T extends JPABase> T merge() {
return (T) em().merge(this);
}
所以,我怎麼能刷新我的模型從數據庫中?
我相信我的實體與實體管理器關聯,因爲我通過'findById'首先檢索它。但是,我可能會錯過一些東西。有沒有辦法通過調試器或其他方式來說明? – pkaeding 2011-05-04 06:29:18
即使沒有打開的事務,JPA也應該能夠檢索實體,並將其作爲附加實體放入其緩存中。但如果你想修改,什麼時候提交?此外,關係發生了什麼?我不知道......在這些情況下,JPA和休眠變成黑盒子,我不知道用調試器進行分析的任何方式(我可能是無知的:))... IMO,分析播放代碼和發生什麼是最好的解決方案。 – mandubian 2011-05-04 06:46:51