2012-05-19 4 views
0

나는 더비 데이터베이스가있는 응용 프로그램을 가지고 있으며 지속성 API로 eclipselink를 사용합니다. 팀 목록이있는 GUI가 있다고 가정 해보십시오. 각 팀에는 다수의 선수가 있습니다.지연로드 된 엔티티를 "언로드"

@OneToMany(mappedBy = "team", fetch = FetchType.LAZY, cascade = { CascadeType.ALL }) 
private List<player> players = new ArrayList<player>(): 

이 같은 플레이어 클래스 : 팀 클래스의 관계는 다음과 같습니다

@ManyToOne(targetEntity = Team.class) 
@JoinColumn(name = "teamID", nullable = false, referencedColumnName = "ID") 
private Team team; 

그래서 나는 지금 내 응용 프로그램을 시작하고 기존의 모든 팀과 목록을 채우는 :

public List<Team> getTeams() 
{ 
    TypedQuery<Team> query = em.createQuery("SELECT t FROM Team t", Team.class); 
    List<Team> teams = query.getResultList(); 
    return teams; 
} 

지금까지 모든 작업이 진행 중입니다. 플레이어가 아닌 팀 만로드됩니다. 이제 팀을 선택하고 명령을 실행하여 팀 플레이어와 테이블을 엽니 다. 테이블은 다음과 같이 채워집니다 :

이제이 팀의 모든 플레이어가로드됩니다. 하지만 테이블을 닫은 후에도로드 된 상태로 남아 있지만 메모리에 남아 있지 않도록 다시로드하려고합니다. 어떻게해야합니까?

답변

0

컨텍스트에서 관리 엔티티를 제거하려면 EntityManager.clear() 메서드 (이전에 EntityManager.flush() 호출)를 호출 할 수 있습니다. 그러나이 작업을 수행하면 개의 모든 관리 엔터티가 제거되므로 데이터베이스 히트가 추가로 발생할 수 있으므로 원하는 항목 일 필요는 없습니다.

운 좋은데 JPA 2.0을 사용할 수있는 경우 더 좋은 옵션 인 EntityManager.detach(Object) 메서드가 있습니다.이 메서드는 지정된 개체를 지속성 컨텍스트에서 제거합니다.

+0

감사합니다. 그렇게 할 것입니다! –

관련 문제