프로젝트가 플레이 프레임 워크 1.3.3 을 사용하고 1.3.3 및 최대 절전 모드 캐시가 나는 등의 컨트롤러가 있습니다플레이 프레임 워크
public static void save(Item item) {
if (item.id != null) { //It means that item is not new, it is being edited
Item existingOldItem = Item.findById(item.id);
//Here I should have an old version of an item as "existingOldItem"
//and new one coming from http request as "item"
}
을 그러나 문제는 항목과 existingOldItem 아주 동일하다. Item.findById 행은 데이터베이스에서 이전 항목을 반환하지 않지만 HTTP 요청 (JPA.em(). createQuery와 동일)에서 새 항목을 반환합니다. 재생 프레임 워크가 캐시에 새 항목을 보내고 findById가 데이터베이스가 아닌 캐시에서 항목을 반환한다고 가정합니다. 제발, 누군가가 나에게 그것의 논리와 문제를 해결하는 방법을 설명 할 수 있을까요?
감사! JPA를 사용하는 웹 프레임 워크의 정상적인 동작입니까 아니면 그냥 Play입니까? 맡은 일? –
이것은 Play입니다! 특유한. 다른 웹 프레임 워크가 똑같은 일을하는 경우 우연의 일치입니다. item.save()가 Play이기 때문에 다른 프레임 워크가이 작업을 수행하면 놀랍습니다. JPA 엔티티가 일반적으로 작동하는 방식이 아닙니다. 다른 프레임 워크가 JPA 객체를 메모리 내에서 수정 한 경우, Hibernate는 응용 프로그램 로직이이를 거부 할 기회없이 데이터베이스에 변경 사항을 플러시 할 수 있습니다. 그러나 Play!에서 변경 사항을 플러시하려면 응용 프로그램 논리에서 save()를 호출해야합니다. –