Listing 1

//Team POJO

@ManyToMany(cascade=PERSIST,fetch=EAGER)
@AssociationTable(table=@Table(name="TEAM_PLAYER"),
joinColumns=@JoinColumn(name="TEAM_ID", referencedColumnName="ID"),
inverseJoinColumns=@JoinColumn(name="PLAYER_ID", referencedColumnName="ID"))

public List getPlayers() { 
return players; 
}
// Player POJO

// players is a List in the Team POJO

@ManyToMany(mappedBy="players", fetch=EAGER)

public List getTeams() { 
return teams; 
}

Listing 2

// NamedQueries in Player POJO

@NamedQueries
({
@NamedQuery(name="findAll",queryString="SELECT OBJECT(p) FROM Player p"),
@NamedQuery(name="findByCity",queryString="SELECT DISTINCT OBJECT(p) FROM Player p, in
 (p.teams) as t where t.city = :city"),
 @NamedQuery(name="findByHigherSalary",queryString="SELECT DISTINCT OBJECT(p1)FROM Player
  p1, Player p2 WHERE p1.salary > p2.salary AND p2.name = :name Ò),
  @NamedQuery(name="findByLeague", queryString=" select distinct object(p) from Player p,
   in (p.teams) as t where t.league = :league"),
   @NamedQuery(name="findByPosition", queryString=" select distinct object(p) from Player p
    where p.position = :position"),
	@NamedQuery(name="findByPositionAndName",queryString=" select distinct object(p) from
	 Player p where p.position = :position and p.name = :name"),
	 @NamedQuery(name="findBySalaryRange",queryString="select distinct object(p) from
	  Player p where p.salary between ?1 and ?2"),
	  @NamedQuery(name="findBySport", queryString="select distinct object(p) from Player p,
	   in (p.teams) as t where t.league.sport = ?1"),
	   @NamedQuery(name="findByTest", queryString=" select distinct object(p) from Player p
	    where p.name = ?1"),
		@NamedQuery(name="findNotOnTeam",queryString=" select object(p) from Player p where
		 p.teams is empty")
		 })

Listing 3

//code before migrating to EJB 3.0

public List getTeamsOfLeague(String leagueId)
{
Debug.print(ÒRosterBean getTeamsOfLeague");
ArrayList detailsList = new ArrayList();
Collection teams = null;

try {
LocalLeague league = leagueHome.findByPrimaryKey(leagueId);

teams = league.getTeams();
} catch (Exception ex) {
throw new EJBException(ex.getMessage());
}

Iterator i = teams.iterator();

while (i.hasNext()) {
LocalTeam team = (LocalTeam) i.next();
TeamDetails details =
new TeamDetails(team.getTeamId(), team.getName(), team.getCity());

detailsList.add(details);
}

return detailsList;
}
//code after migrating to EJB 3.0

 public List getTeamsOfLeague(String leagueId)
{
Debug.print(ÒRosterBean getTeamsOfLeague");
League l = (League)getEntityManager().find(ÒLeague", leagueId);
return l.getTeamList();
}