최신 상태가 아닌 데이터를 반환하는 Hibernate 백업 Jpa 쿼리에 문제가 발생했습니다. 데이터베이스 자체 대신 캐시에서 데이터를 가져 오는 것이 문제라고 가정합니다.데이터베이스 대신 캐시에서 가져 오는 Jpa 쿼리?
예를 들어 한 페이지에서 개체를 변경하고 유지 한 다음 데이터베이스의 행을 나열하는 이전 페이지로 돌아가서 변경하기 전에 존재했던 개체를 표시합니다. 내 DAO의 쿼리 기록이 내 로그에 표시 될 수 있으며 데이터베이스에 들어가서 변경 사항이 지속되었음을 확인할 수 있지만 JPA는 다음 페이지로 이동할 때 데이터베이스에서 데이터를 가져 오지 않습니다.
다른 웹 브라우저에서 페이지를로드 할 때 업데이트 된 데이터베이스보기가 표시되지 않기 때문에 일종의 세션 캐싱이있을 수 있습니다.
이 문제를 어떻게 해결합니까?
편집 : 내 MVC 프레임 워크 (스프링 MVC)가 아무 것도 캐시하고 있지 않은지 확인하기 위해 컨트롤러를 로깅하는 것을 포함하여 몇 가지 후속 테스트를 수행했습니다. 컨트롤러 수준에서도 오래된 데이터베이스 정보를 볼 수 없습니다.
다음은 ORM 항목 파일의 매핑 스 니펫입니다.
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = true)
@Column(name = "ID", nullable = false)
private Integer id;
@Basic(optional = false)
@Column(name = "Name", nullable = false, length = 100)
private String name;
@Basic(optional = false)
@Column(name = "DayOffset", nullable = false)
private int dayOffset;
@Basic(optional = false)
@Column(name = "StartTime", nullable = false, length = 5)
private String startTime;
@Basic(optional = false)
@Column(name = "Enabled", nullable = false)
private boolean enabled;
@Basic(optional = false)
@Column(name = "LastTouched", insertable = false, updatable = false, nullable =
false)
@Temporal(TemporalType.TIMESTAMP)
private Date lastTouched;
@Column(name = "TouchedBy", length = 50)
private String touchedBy;
@JoinTable(name = "ReconciliationSearchRule",
joinColumns = {@JoinColumn(name = "ReconciliationId",
referencedColumnName = "ID", nullable = false)},
inverseJoinColumns = {@JoinColumn(name = "SearchRuleId",
referencedColumnName = "ID", nullable = false)})
@ManyToMany(fetch = FetchType.LAZY)
private Collection<SearchRule> searchRuleCollection;
@JoinColumn(name = "ServerId", referencedColumnName = "ID", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Server server;
@OneToMany(mappedBy = "reconciliation")
private Collection<Report> reportCollection;
"DAO에서 내 쿼리가 불 수 있습니다"라는 의미는 무엇입니까?SQL이 데이터베이스로 전송되는 것을 보시겠습니까? 처음부터 변화를 올바르게 지속하고 있음을 어떻게 알 수 있습니까? JPA 제공 업체 인 –
은 무엇입니까? – Bozho
엔티티는 어떻게 저장합니까? EntityManager.persist() 또는 .merge()? – Bozho