1

derbyデータベースを備えたアプリケーションがあり、永続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;
}

これまでのところすべてが正常に機能しており、プレーヤーではなく、チームのみがロードされます。チームを選択してチームのプレーヤーと一緒にテーブルを開き、このコマンドを実行するとします。テーブルは次のように入力されます。

team.getPlayers();

これで、このチームのすべてのプレーヤーがロードされました。必要になっているからです。しかし、テーブルを閉じた後もロードされたままですが、メモリに残らないように再度「アンロード」したいと思います。これを行うにはどうすればよいですか。

4

1 に答える 1

1

管理対象エンティティをそのコンテキストから削除したい場合は、EntityManager.clear()メソッドを呼び出すことができます(EntityManager.flush()前に呼び出す)。ただし、この操作により、すべての管理対象エンティティが削除されます。これは、追加のデータベースヒットを引き起こす可能性があるため、必ずしも必要なものではありません。

運が良ければ、JPA 2.0を使用できる場合は、より良いオプションがあります。EntityManager.detach(Object)メソッドは、永続コンテキストから特定のオブジェクトを削除します。

于 2012-05-19T21:48:25.663 に答える