3

2つのエンティティがあります。会議トピック (対応する表は会議トピックです)

1つの会議に一連のトピックが含まれる場合。

テーブル構造の例は次のとおりです。

テーブル

私の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式を使用したいと思います、そして私はそれを理解しませんでした、どうすればそれを行うことができますか。

私はこのドキュメントを読みましたが、それらの例を私の質問に適用する方法を理解していませんでした。

上記のSQLと同じようにHQL式はどのように機能しますか?

ありがとうございました。

4

2 に答える 2

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 に答える
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 に答える