Tôi có một bộ sưu tập các trạng thái, mà tôi muốn lưu vào bộ nhớ cache cho thời gian của ứng dụng, tốt nhất là sau khi nó được gọi lần đầu tiên. Tôi đang sử dụng EclipseLink làm nhà cung cấp kiên trì của mình. Trong thực thể EJB3 của tôi, tôi có đoạn mã sau:Làm thế nào để cấu hình bộ đệm ẩn truy vấn trong EclipseLink
@Cache
@NamedQueries({
@NamedQuery(
name = "State.findAll",
query = "SELECT s FROM State s",
hints = {
@QueryHint(name=QueryHints.CACHE_USAGE, value=CacheUsage.CheckCacheThenDatabase),
@QueryHint(name=QueryHints.READ_ONLY, value=HintValues.TRUE)
}
)
})
này dường như không làm gì cả mặc dù, nếu tôi theo dõi các truy vấn SQL sẽ mysql nó vẫn không một chọn mỗi lần Session Bean của tôi sử dụng NamedQuery này.
Cách chính xác để định cấu hình truy vấn này để truy vấn đó chỉ được đọc một lần từ cơ sở dữ liệu, tốt nhất là trên tất cả các phiên?
Edit: tôi kêu gọi các truy vấn như thế này:
Query query = em.createNamedQuery("State.findAll");
List<State> states = query.getResultList();
Tốt nhất của may mắn tìm ra cấu hình phiên/bộ nhớ đệm của EclipseLink. Tôi không bao giờ có thể. – cletus