我很感謝幫助理解爲什麼我的應用程序無法找到一個實體,即使它存在於數據庫中;我相信這個問題涉及併發的寫作/閱讀。我正在使用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