我很感谢帮助理解为什么我的应用程序无法找到一个实体,即使它存在于数据库中;我相信这个问题涉及并发的写作/阅读。我正在使用jpa2 /休眠4和弹簧3.并行写作和阅读JPA2 /休眠
我有一个方法,创建一个用户,然后将ID作为JSON对象消息发送到用户进一步处理的消息队列。当消息处理程序(UserProcessor.class)尝试使用find
用户时(见下文),会发生问题。
Registration.class
@Transactional
public Response createUser(String firstName, String lastName) {
User tmpUser = new User(firstName, lastName);
User savedUser = this.em.merge(tmpUser);
this.em.flush();
if (savedUser != null) {
processUser(savedUser.getId()); // message sent to queue.
} else {
// Throw exception...
}
}
UserProcessor.class
@Transactional(rollbackFor={javax.ws.rs.WebApplicationException.class})
public void processUser(Long id) {
User user = this.em.find(User.class, id); // No user entity is found, "user" is null.
if (user == null) {
// throw exception
}
...
}
为什么不写你的方法直接传递用户作为参数:public void processUser(final User aUser)'? – 2012-03-01 20:50:38
而您面临的问题可能与事务相关。 – 2012-03-01 20:51:42
@nico_ekito:因为消息系统被java和非java服务使用,所以我选择使用json数据结构而不是将消息系统绑定到java。 – Ari 2012-03-01 21:09:39