3

有两个实体。会议主题 (对应的表格是会议主题

一个会议可能包含一组主题。

示例表结构如下:

表

在我的 java 代码Meeting类中有以下声明:

@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "MeetingTopics",
joinColumns = {
    @JoinColumn(name = "meetingId")},
inverseJoinColumns = {
    @JoinColumn(name = "topicId")})    
@Expose
private Set<Topic> topicsList;

我想获得一个会议列表(其中包含主题),其中someTopicField一个主题等于一个特定值,假设它是11

得到我想要的 SQL 表达式如下所示:

SELECT meetings.meetingcomment, 
       topics.topicsubject, 
       topics.sometopicfield 
FROM   topics 
       INNER JOIN (meetings 
                   INNER JOIN meetingtopics 
                           ON meetings.meetingid = meetingtopics.meetingid) 
               ON topics.topicid = meetingtopics.topicid 
WHERE  ( topics.sometopicfield  = 11 ); 

但是我想用HQL表达式来解决这个任务,我没有弄清楚,我怎么能这样做。

我已阅读此文档但不明白如何将这些示例应用于我的问题。

什么 HQL 表达式将与上述 SQL 执行相同的操作?

谢谢你。

4

2 回答 2

1

尝试这样的事情:

select m.meetingcomment,
       t.topicsubject,
       t.sometopicfield
from Meeting as m
inner join m.topicsList as t
with t.sometopicfield = 11

如果您只需要Meeting类字段,则 hql 是:

select m from Meeting as m
inner join m.topicsList as t
with t.sometopicfield = 11

你会得到一个Meeting对象列表。

于 2013-03-27T11:40:26.303 回答
1

像这样的东西应该工作

select meeting.meetingcomment,
       topic.topicsubject,
       topic.sometopicfield
from Meeting meeting
inner join meeetings.topicsList as topic
where topic.sometopicfield = 11
于 2013-03-27T11:29:17.283 回答