[英]JPA+EJB not managed entity in websocket communication
接下來,瀏覽器再次通過“ secondMessage”方法在服務器中處理數據。 它將更改之前已存儲的Player實體數據。 數據已更改,但問題是數據庫未更改
@Singleton @Startup public class Engine { @Inject DaoPlayer daoPlayer; Player player; public void firstMessage(clientId){ player = daoPlayer.findById(clientId); player.coin = 3; } public void secondMessage(){ player.coin = 999;
}
問題:
方法“ secondMessage”中的播放器實體中的更改未更新數據庫
到目前為止,我嘗試了什么:
我在secondMessage中做到這一點,並且工作正常。 但我不想這樣。
public void secondMessage(){ player.coin = 999; daoPlayer.getEntityManager().merge(player);
}
我期待
player.coin = 999; 應該足以更新數據庫
您試圖做的事是不可能的。
您需要將secondMessage
編碼為
public void secondMessage() {
player.coin = 999;
player = daoPlayer.merge(player);
}
您的第一個方法之所以有效,是因為player
對象在事務完成之前(可能是在方法返回時)仍是當前持久性上下文的一部分。
第二種方法不起作用,因為player
不再是任何持久性上下文的一部分。 merge
操作將其合並回到持久性上下文中,如果已在調用鏈中較早地加載它,則可能返回不同的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.