2012-05-19 2 views
0

У меня есть приложение с базой данных derby и используйте eclipselink как persistence api. Скажите, что у меня есть 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; 
} 

Все работает до сих пор, загружаются только команды, а не игроки. Скажем, теперь я открываю таблицу с игроками команды, выбирая команду и вызывая команду для этого. Таблица заполнена:

team.getPlayers(); 

Итак, теперь все игроки этой команды загружены, потому что теперь они необходимы. Но после того, как я закрыл таблицу, они остаются загруженными, но я хотел бы «разгрузить» их снова, чтобы они не остались в памяти - как бы я это сделал?

ответ

0

Если вы хотите избавиться от управляемых объектов из своего контекста, вы можете позвонить по методу EntityManager.clear() (по телефону EntityManager.flush()). Однако эта операция удаляет все управляемые объекты, что не обязательно то, что вы хотите, поскольку это может вызвать дополнительные удары базы данных.

Если вам повезет, и вы можете использовать JPA 2.0, есть лучший вариант: EntityManager.detach(Object) метод, который удаляет данный объект из контекста постоянства.

+0

Хорошо, спасибо, сделают это так! –

Смежные вопросы