2010-12-06 2 views
1

JPA가 데이터베이스에서 최신 데이터를 가져 오지 못하고 있음을 발견했습니다.JPA : 최신 데이터를 가져 오지 않는 쿼리

내 데이터 모델에는 여러 주문 엔터티를 소유 한 고객 엔터티가 있습니다.

em.persist(order); 
em.getTransaction().commit(); 
em.close(); 

내가 전화 주문을 보려면 :

Collection<Order> orders = customer.getOrderCollection(); 

는 주문 수집이 최신 순서를 빠져 나는 주문을 지속하고있다. 내가 확인한 순서는 데이터베이스에 지속됩니다. 드라이버 로깅을 켜면 getOrderCollection()이 호출 될 때 데이터베이스에 대한 호출이 표시되지 않습니다.

Netbeans 6.9에서 & 앱을 다시 배포하는 것을 중지하면 내가 지속 한 최신 주문이 표시됩니다. 어쩌면 getOrderCollection()을 방해 할 수있는 일종의 캐싱이 있을까요? 어떤 이유로 JPA는 데이터베이스에 참여하지 않습니다. 왜?

getOrderCollection()이 호출되면 어떻게 JPA가 데이터베이스로 이동합니까?

+0

, 당신은 어떤 구현을 사용하고 있습니까? –

+0

외부 소스 (JPA 제공 업체가 관리하지 않음)를 통해 테이블을 업데이트하고 있습니까? – Bogdan

+0

@Bogdan : 아니, JPA를 통해 모든 것을하고 있습니다. – Sajee

답변

2

<shared-cache-mode>NONE</shared-cache-mode>을 persistence.xml에 시도하십시오.

2

개체 모델에서 양방향 관계를 유지해야합니다. 고객을 위해 새 주문을 추가 할 때 고객의 주문에 주문을 추가해야합니다.

public void addOrder(Order order) { 
    this.orders.add(order); 
    order.setCustomer(this); 
} 

또한 객체를 새로 고치거나 캐시를 해제하지만, 코드를 수정하는 것이 가장 좋은 것입니다 수 있습니다.

참조, 그런데

http://en.wikibooks.org/wiki/Java_Persistence/Caching

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching

+0

"order.setCustomer (this);"와 동일한 기능을했습니다. 내 코드에서. 내가 왜 아직도 문제를 일으키는 지 아는 어떤 생각? 하지만 캐시를 사용하지 않도록 설정 했으므로 지금은 그 해결책을 살펴 보겠습니다. – Sajee

+0

또한 customer.getOrders()를 수행해야합니다. add (order) – James

관련 문제