Hibernate 如何使用HQL从实体查询元素集合

Hibernate 如何使用HQL从实体查询元素集合,hibernate,hql,embeddable,Hibernate,Hql,Embeddable,有人知道如何使用HQL从实体查询元素集合吗? 我正在尝试加载给定实况锦标赛的所有日程安排,其中回合数为某个数字。我需要一个类似以下的查询: select m from MatchSchedule m where m.round=:round and m.tournament=:id 但这给了我一个“未映射”的例外,我想是因为MatchSchedule不是一个实体,而是一个可嵌入的 我的LiveTornament实体的结构如下: public class LiveTournament { @Id

有人知道如何使用HQL从实体查询元素集合吗? 我正在尝试加载给定实况锦标赛的所有日程安排,其中回合数为某个数字。我需要一个类似以下的查询:

select m from MatchSchedule m where m.round=:round and m.tournament=:id
但这给了我一个“未映射”的例外,我想是因为MatchSchedule不是一个实体,而是一个可嵌入的

我的LiveTornament实体的结构如下:

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<>();
...

根据您的澄清更新:

模型对象需要@Entity来表示它是模型对象。实体和Id是必需的

因此:

由于没有“where子句”,我假设您计划获得一个LiveTournament列表。我还假设你有一个匹配时间表的getter

    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=“从liveo中选择o”;
查询=.createQuery(hql);
List=query.getResultList();
对于(l:列表){
List matchSchedList=l.getMatchSchedules());
//用这个时间表列表做些什么
} 
注意:您可以在映射对象列表中进行选择,并仅检索所需内容。比如:

    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=“从匹配计划m中选择m,m,…,其中。。。。;
查询=.createQuery(hql);
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()
String hql=“选择m,m。。。从附表m开始,其中。。。。;
查询=.createQuery(hql);
Map=(Map)query.getSingleResult()

我不确定这就是我想要的。我已经更新了这个问题,以便更清楚地了解我想要实现的目标。由于更新,似乎缺少的是类之前的注释@Entity
    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()