2013-03-27 3 views
3

Существует два объекта. Встреча и Тема (соответствующие таблицы встречи и Темы)Атрибут запроса HQL для выражения SQL

Где одна встреча может содержать набор тем.

Пример структуры таблицы выглядит следующим образом:

tables

В моей 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, чтобы решить эту задачу, и я не понять это, как я мог сделать это.

Я читал this documentation, но не понял, как применить эти примеры к моему вопросу.

Какое выражение HQL будет делать то же, что и выше описанный SQL?

спасибо.

ответ

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 объектов.

+0

спасибо, я проверю это. – 2013-03-27 12:14:28

+0

, когда я вызываю 'from Meeting как m inner join m.topicsList as t с t.sometopicfield = 11' Я получаю смешанный список с объектами Topic и Meeting внутри. Есть ли способ получить список только с объектами Meeting? – 2013-03-27 12:20:24

+1

Нет, если вам нужно выбрать поля из «Встречи» и «Тема», как в вашем примере. Да, если вы ограничиваете только поля «Встреча» в запросе. Обновлен ответ. – dcernahoschi

1

Что-то, как это должно работать

select meeting.meetingcomment, 
     topic.topicsubject, 
     topic.sometopicfield 
from Meeting meeting 
inner join meeetings.topicsList as topic 
where topic.sometopicfield = 11 
+0

спасибо, я проверю это. – 2013-03-27 12:14:51

+0

, когда я вызываю 'из собрания собрания inner join meeetings.topicsList как тема где topic.sometopicfield = 11' Я получаю смешанный список с объектами Topic и Meeting внутри. Есть ли способ получить список только с объектами Meeting? – 2013-03-27 12:20:56

Смежные вопросы