作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不太确定我的问题出在哪里,因为我正在两个我没有太多经验的领域进行试验:JPA 和 Futures(使用 Play! Framework 的 Jobs 和 Promises)。
我有以下代码,当另一个 HTTP 请求的另一个线程为该对象的一个字段赋予值时,我想返回一个 Meeting 对象。这是我所拥有的:
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);
正如我在评论中指出的,其中有三行,我认为其中的任何一行都应该允许我从数据库刷新对象的内容。从调试器来看,这些调用似乎刷新了多对一关系,但单个值却没有。
我的 session
对象扩展了Play!框架的模型,为了方便起见,这里是 refresh
方法:
/**
* Refresh the entity state.
*/
public <T extends JPABase> T refresh() {
em().refresh(this);
return (T) this;
}
和合并
方法:
/**
* 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);
}
那么,如何从数据库刷新我的模型?
最佳答案
所以,我最终将这个问题交叉发布到 play-framework小组,我在那里得到了答案。因此,对于讨论,请查看该线程。
为了让将来遇到此问题的任何人都能在网络搜索中找到答案,以下是我之前粘贴的代码片段:
Promise<Meeting> meetingPromise = new Job<Meeting> () {
@Override
public Meeting doJobWithResult() throws Exception {
Meeting meeting = Meeting.findById(id);
while (meeting.bbbMeetingId == null) {
Thread.sleep(1000);
if (JPA.isInsideTransaction()) {
JPAPlugin.closeTx(false);
}
JPAPlugin.startTx(true);
meeting = Meeting.findById(id);
JPAPlugin.closeTx(false);
}
return meeting;
}
}.now();
Meeting meeting = await(meetingPromise);
我没有使用 @NoTransaction 注释,因为这会弄乱一些其他检查请求是否来自有效用户的代码。
关于java - 如何在未来刷新实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5865660/
我是一名优秀的程序员,十分优秀!