JPA: как разбить результат объединения на списки с собственными сопоставлениями запросов

Я должен решить эту проблему с помощью собственного сопоставления запросов (это единственный способ, который я могу сделать).

Это объект игрока:

@SqlResultSetMapping(
        name = "PlayerMapping",
        entities = {
            @EntityResult(
                    entityClass = PlayerEntity.class,
                    fields = {
                        @FieldResult(name = "idPlayer", column = "id_player"),
                        @FieldResult(name = "name", column = "nome"),
                        @FieldResult(name = "nachname", column = "cognome"),
                        @FieldResult(name = "team", column = "team")

                    }),
            @EntityResult(
                    entityClass = TeamEntity.class,
                    fields = {
                        @FieldResult(name = "id", column = "team_id"),
                        @FieldResult(name = "name", column = "team_name"),
                        @FieldResult(name = "stadt", column = "team_city"),
                        })})

@Entity
@Table(name = "Player")
public class PlayerEntity {

    @Id 
    @GeneratedValue
    int idPlayer;
    @Column(name = "nome")
    String name;
    @Column(name = "cognome")
    String nachname;

    @Column(name = "team")
    String team;

    **Getter, Setter, Constructor...**

}

Здесь сущность команды:

@Entity 
@Table(name = "Team")
public class TeamEntity {

@Id
@GeneratedValue (strategy = GenerationType.AUTO)
int id;

@Column(name = "name")
String name;
@Column(name = "city")
String stadt;



@Override
public String toString() {
    return "TeamEntity [id=" + id + ", name=" + name + ", stadt=" + stadt + "]";
}

**Getter, Setter, Constructor...**


}

И вот основной метод для теста:

TeamEntity team1 = new TeamEntity("Milan", "Milano");
TeamEntity team2 = new TeamEntity("Fiorentina", "Firenze");

PlayerEntity spieler1 = new PlayerEntity("Gattuso", "Ringhio", "Milan");
PlayerEntity spieler2 = new PlayerEntity("Andrea", "Pirlo", "Milan");
PlayerEntity spieler3 = new PlayerEntity("Paolo ", "Maldini", "Milan");
PlayerEntity spieler4 = new PlayerEntity("Antonio", "Gilardino", "Fiorentina");

teamEntityRepository.save(team1);
teamEntityRepository.save(team2);

spielerRepository.save(spieler1);
spielerRepository.save(spieler2);
spielerRepository.save(spieler3);
spielerRepository.save(spieler4);

Query q = em.createNativeQuery("SELECT s.id_player, s.cognome, s.nome, s.team, t.id as team_id, t.name as team_name, t.city as team_city FROM Prova.player s  join Prova.Team t on (t.name  = s.team)", "PlayerMapping" );
List<Object[]> query = q.getResultList();

for (Object[] a: query) {
    System.out.println(a [0].toString());
    System.out.println(a [1].toString());
}

Это выход:

SpielerEntity [idPlayer=3, name=Gattuso, nachname=Ringhio, team=Milan]
TeamEntity [id=1, name=Milan, stadt=Milano]
SpielerEntity [idPlayer=4, name=Andrea, nachname=Pirlo, team=Milan]
TeamEntity [id=1, name=Milan, stadt=Milano]
SpielerEntity [idPlayer=5, name=Paolo   , nachname=Maldini, team=Milan]
TeamEntity [id=1, name=Milan, stadt=Milano]
SpielerEntity [idPlayer=6, name=Antonio, nachname=Gilardino, team=Fiorentina]
TeamEntity [id=2, name=Fiorentina, stadt=Firenze]

Проблема в том, что я хочу получить список игроков, разделенный на команды. Моя идея состояла в том, чтобы создать еще одну команду Pojo, со списком, содержащим весь Player. Подобно:

public class TeamPojo {

    int id;
    String name;
    String stadt;
    List<PlayerEntity> players;

}

Можно ли сопоставить что-то подобное? Спасибо.

0 ответов

Другие вопросы по тегам