Как запросить коллекцию элементов из сущности, используя HQL - PullRequest
0 голосов
/ 08 сентября 2018

Кто-нибудь знает, как запросить коллекцию элементов у сущности, используя HQL? Я пытаюсь загрузить все графики из данного LiveTournament, где раунд определенное число. Мне нужен запрос как:

select m from MatchSchedule m where m.round=:round and m.tournament=:id

Но это дает мне исключение "не сопоставлено", я полагаю, потому что MatchSchedule - это не сущность, а встраиваемая структура.

Моя сущность LiveTournament имеет следующую структуру:

public class LiveTournament {
@Id
private int id;
@OneToOne
@JoinColumn(name="id")
@MapsId
private Tournament tournament;
private TournamentParameters parameters;
private TournamentRoundData roundData;

@ElementCollection
@JoinTable(name="MatchSchedule", joinColumns=@JoinColumn(name="tournamentId"))
private Collection<MatchSchedule> matchSchedules = new ArrayList<>();
...

И мой MatchSchedule встраиваемый:

public class MatchSchedule {
private int round;
private Timestamp startDate;
@OneToOne
@JoinColumn(name="server")
private Server server;
...

1 Ответ

0 голосов
/ 08 сентября 2018

Обновлено на основе ваших разъяснений:

Модельный объект нуждается в @Entity, чтобы сказать, что это модельный объект. Entity и Id требуются.

так:

@Entity
class <modelName> {

   @id
   ...

} 

Вам необходимо добавить псевдоним к вашей модели в предложении from и добавить псевдоним в ваш выбор

так:

SELECT o FROM uk.xxx.dto.tournament.stages.LiveTournament o

Поскольку здесь нет "условия", я предполагаю, что вы планируете получить список LiveTournament. Я также предполагаю, что у вас есть геттер для matchSchedules.

    String hql = "select o from LiveTournament o";
    Query query = <*Your persistence context*>.createQuery(hql);
    List<LiveTournament> list = query.getResultList();
    for(LiveTournament l : list) {
        List<MatchSchedule> matchSchedList = l.getMatchSchedules());
        //do something with this list of matchSchedule
     } 

Примечание: вы можете выбрать в Список сопоставленных объектов и получить обратно только то, что вы хотите. Что-то вроде:

    String hql = "select m.<item1>, m.<item2>, ... from MatchSchedule m where ....;
    Query query = <*Your persistence context*>.createQuery(hql);
    List<Map<String,Object>> list = query.getResultList();

если один элемент можно вернуть обратно на карту:

String hql = "select m.<item1>, m.<item2>, ... from MatchSchedule m where ....;
Query query = <*Your persistence context*>.createQuery(hql);
Map<String,Object> map = (Map<String, Object>) query.getSingleResult()
...