2010-04-30 2 views
0

Hibernate docs에서 예 그래서 그 루트 수준 엔티티 (고객) 읽기 전용의 컬렉션 (티켓)의 동안 하나를 수정 감안할 때 읽기 - 쓰기되어 고객에 액세스 할 때 티켓루트 엔티티 및 그 콜렉션 (EHCache가있는 Hibernate)에 대한 캐시가 다른 여러 전략이 있습니까?

@Entity 
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY) 
public class Customer { 
    ... 
    @OneToMany(...) 
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
    public SortedSet<Ticket> getTickets() { 
     return tickets; 
    } 
    ... 
} 

겠습니까 수집은 새로 고쳐 캐시에서?

답변

1

다른 Customertickets 중 하나를 수정하면 예, 그렇습니다. 왜 이걸 시험해 보지 그래? Cutomer#1tickets 컬렉션에 Ticket#1Ticket#2이 있다고 가정 해 보겠습니다. 이 코드를 실행했습니다 :

// loading in first session 
Session session1 = HibernateUtil.getSession(); 
Transaction tx1 = session1.beginTransaction(); 
Customer c1 = (Customer) session1.load(Customer.class, 1L); // loads from db and puts in cache 
for (Ticket ticket : c1.getTickets()) { // caches q2742145.Customer.tickets#1 
    System.out.println(ticket); 
} 
Ticket ticket = (Ticket) session1.load(Ticket.class, 1L); // doesn't hit the db 
ticket.setName("foo"); // do some change on Ticket#1 
session1.save(ticket); 
tx1.commit(); // Ticket#1 gets updated in the db and the cached association invalidated 

// loading in second session 
Session session2 = HibernateUtil.getSession(); 
Transaction tx2 = session2.beginTransaction(); 
Customer c2 = (Customer) session2.load(Customer.class, 1L); // hits the cache 
Set<Ticket> tickets = c2.getTickets(); 
for (Ticket ticket2 : tickets) { // reloads tickets from db 
    System.out.println(ticket2); 
} 
tx2.commit(); 

티켓 모음이 "새로 고침"되는 것을 보여줍니다.