나는 엔티티는 다음과 같이 정의했다 :JPA의 EntityManager 캐싱
find
작업이 엔티티 관리자에서 수행 할 때 내가 무엇을 볼 수에서
public class Version {
@Id
private Long id;
private String content;
@Transient
private Model model;
//...
}
, 그것은 한 번만 기본 데이터베이스에 SELECT
하게 한 다음 엔티티는 엔티티 관리자에 캐시됩니다. 그러나 model
속성에 Model
을 할당하면이 변경 내용이 캐시 된 엔터티에 반영되지 않습니다. 예 : 한 호출에서 find
조작이 수행되고 Model
이 지정되면 다른 EJB에서 find
을 다시 호출하면 model
등록 정보가 다시 null
입니다. 이 변경 사항이 캐시 된 엔티티에 반영되지 않았습니까? 아마도 @Transient
일까요?
고맙지 만 두 번째 EJB 호출에서 발급되는 새로운 SQL 쿼리 (로깅 수준이 FINEST로 설정 됨)가 표시되지 않습니다. 트랜잭션 관리가 기본값으로 설정됩니다. 그 이유는 무엇일까요? – Dario
EJB1이 EJB2를 호출합니까? 아니면 클라이언트 호출 EJB1이 있습니까? 그런 다음 클라이언트가 EJB2를 호출합니까? 거래의 시작 시점과 종료 시점을 이해하고 있습니까? –
웹 서비스를 통해 호출되는 EJB는 하나뿐입니다. 동일한 메소드에 대해 두 x 연속 웹 서비스 호출이 작성됩니다. 첫 번째 호출에서 로그에서'SELECT' 쿼리를 봅니다. 두 번째 호출에는 쿼리가 전혀 없습니다. – Dario