다음으로 브라우저는 'secondMessage'메소드로 서버에서 처리 된 데이터를 다시 보냅니다. 이전에 이미 저장 한 플레이어 엔티티 데이터를 변경합니다. 데이터는 변경되지만 문제는 데이터베이스가 변경되지 않는다는 것입니다.
@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
작업은이를 지속성 컨텍스트로 다시 병합하여 콜 체인에서 이전에로드 된 경우 다른 인스턴스를 반환 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다