rbonjour,
Veja que vc definiu que sua estratégia de recuperação dos dados como “fetch = FetchType.LAZY” em ambos os lados.
GamJogoPossibilidade
@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "gamJogoPossibilidade")
public List<GamParticipantePalpite> getGamParticipantePalpites() {
return gamParticipantePalpites;
}
GamParticipantePalpite
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "jogpossi_cod", nullable = false)
public GamJogoPossibilidade getGamJogoPossibilidade() {
return this.gamJogoPossibilidade;
}
Deste modo, a lista de GamParticipantePalpite só será buscada qdo vc acessar o método getGamParticipantePalpite(), e para isso ele precisaria estar com sua sessão na base de dados aberta, mas não vai estar e vai te retornar alguma exceção. E isso irá acontecer da mesma maneira para referência da entidade GamJogoPossibilidade .
Para que seus dados sejam recuperados no momento da excecução da HQL ou Criteria defina em seus mapeamentos FetchType.EAGER. Só tome cuidado com isso, não defina isso para todas suas coleções senão, dependendo do caso vc vai carregar sua base inteira na memória … 
Normalmente eu uso a seguinte estratégia.
1 - Por padrão usar FetchType.LAZY;
2 - Usar FetchType.EAGER para mapeamentos tipo ManyToOne, porque somente traz a entidade relacionada;
3 - Usar FetchType.EAGER para mapeamentos tipo OneToMany, que trazem uma lista de objetos, somente para associações que representam composições, e mesmo assim avaliando se realmente é necessário.
E para fugir do problema que vc está enfrentando mudar a estratégia de recuperação conforme minha necessidade, como te mostrei na classe PaiEAO.
Veja que lá eu tenho o seguinte método:
public Pai carregarPai(Long idPai) throws Exception {
Pai pai = null;
try {
StringBuffer sb = new StringBuffer();
sb.append(" FROM Pai p ");
sb.append(" LEFT JOIN FETCH p.filhos f ");
sb.append(" WHERE p.idPai = :idPai ");
Query q = em.createQuery(sb.toString());
q.setParameter("idPai", idPai);
pai = (Pai)q.getSingleResult();
} catch (Exception ex) {
throw new Exception(ex.getMessage(), ex);
}
return pai;
}
Veja que tem no HQL "LEFT JOIN FETCH p.filhos f ", isso independente de estiver mapeado para FetchType.LAZY na entity ele de qualquer forma vai carregar a lista de filhos.
Na API Criteria tem uma instrução, como abaixo, que permite vc mudar a estratégia de recuperação.
criteria.setFetchMode("filhos", FetchMode.JOIN);
@braços