Hibernate est de faire de la sélection multiple requêtes au lieu d'une seule (à l'aide de join fetch)

J'ai la requête suivante qui je m'attends à exécuter dans une sélection unique de demande:

@NamedQuery(name=Game.GET_GAME_BY_ID1,
                query = "SELECT g FROM Game g " +
                        "JOIN FETCH g.team1 t1 " +
                        "JOIN FETCH t1.players p1 " +
                        "JOIN FETCH p1.playerSkill skill1 " +
                        "where g.id=:id")

Le problème, c'est que tout est extraite par de multiples requêtes.
Je ne veux que de l'Équipe et des joueurs de l'équipe et de chaque joueur de compétences à récupérer en une seule requête. Mais au lieu de cela j'ai eu plusieurs requêtes select pour récupérer chaque équipe, joueur, chaque joueur stats et des compétences.

Ici sont des entités utilisées avec des annotations donné:

Jeu Entité:

public class Game implements Serializable {
    private Integer id;
    private Integer dayNumber;
    private Long date;
    private Integer score1;
    private Integer score2;

    private Team team1;
    private Team team2;

    ....

    @ManyToOne(fetch=FetchType.EAGER)
    @Fetch(FetchMode.JOIN)
    @JoinColumn(name="team_id1")
    public Team getTeam1() {
        return team1;
    }


    public void setTeam1(Team team1) {
        this.team1 = team1;
    }

    //uni directional many to one association to Team
    @ManyToOne(fetch=FetchType.EAGER)
    @Fetch(FetchMode.JOIN)
    @JoinColumn(name="team_id2")
    public Team getTeam2() {
        return team2;
    }


    public void setTeam2(Team team2) {
        this.team2 = team2;
    }
}

De L'Équipe De L'Entité:

public class Team implements Serializable {
    ...
    private Set<Player> players;
    ...
    @OneToMany(mappedBy="team", targetEntity=Player.class, fetch=FetchType.LAZY, cascade=CascadeType.ALL)
    @Fetch(FetchMode.JOIN)
    @OrderBy(value="batOrder, pitRotationNumber ASC")
    public Set<Player> getPlayers() {
        return players;
    }


    public void setPlayers(Set<Player> players) {
        this.players = players;
    }
}

Joueur De L'Entité:

public class Player implements Serializable {
    private PlayerStat playerStats;
    private PlayerSkill playerSkill;
    ...
    @OneToOne(mappedBy="player", cascade=CascadeType.ALL)
    @Fetch(FetchMode.JOIN)
    public PlayerStat getPlayerStats() {
        return this.playerStats;
    }

    public void setPlayerStats(PlayerStat playerStats) {
        this.PlayerStats = playerStats;
    }

    ...

    @OneToOne(mappedBy="player", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
    @Fetch(FetchMode.JOIN)
    public PlayerSkill getPlayerSkill() {
        return this.playerSkill;
    }

    public void setPlayerSkill(PlayerSkill playerSkill) {
        this.playerSkill = playerSkill;
    }
}

Pourriez-vous point sur les erreurs commises?
J'ai besoin d'une requête select pour charger un jeu, c'est les équipes, les joueurs de l'équipe et de chaque joueur de compétences.

EDIT 1:
voici postgresql journal (une partie de), pur requêtes sql:
http://pastebin.com/Fbsvmep6

Origine des noms de tables sont modifiées dans cette question, pour des raisons de simplicité,
Le jeu est GamelistLeague, l'Équipe est TeamInfo, et il y a BatterStats et PitcherStats au lieu d'un PlayerStat

La première requête à partir des journaux est celui affiché dans cette question ci-dessus (du nom de la requête) qui, si je l'exécuter directement dans la base de données, les rendements tout en tant que de besoin.

Pouvez-vous s'il vous plaît poster les réels SQL exécutée? Qu'advient-il si vous éteignez le chargement différé?
veuillez prendre un coup d'oeil sur modifier. Je peux essayer de désactiver le chargement différé, mais plus tard, si j'ai besoin d'être défini comme paresseux pour d'autres requêtes qui ne devrait pas chercher avidement les joueurs.
Hibernate... rendre les gens intelligents exécuter stupide requêtes depuis 2001. Peut-être temps d'abandonner le Hibernate inutilités et de passer à quelque chose de plus proche du metal 🙂
hahaha 😀
Je voulais juste dire quelque chose à l'Lance Java. Je vais fossé hibernate et l'utilisation mybatis. de la bonne seigneur est hibernate faire de moi un réel stupide.

OriginalL'auteur maximus | 2015-01-14