1

次の HQL ステートメントでオブジェクトのリストを返そうとしています:

return getHibernateTemplate().findByNamedParam("Select distinct response.user
    from Survey survey
    inner join fetch survey.surveyDates surveyDate
    inner join fetch surveyDate.responses response
    where survey.id = :surveyId)", "surveyId", surveyId);

次のエラーは私を怒らせます:

HTTP ステータス 500 - クエリで結合フェッチが指定されましたが、フェッチされた関連付けの所有者が選択リストに存在しませんでした

そこで、コードに「fetch」という単語を入れずに試してみました。それから私の返すリストは空です。

アプリケーションは Doodle のようなもので、データベースは次のようになります。

Survey にはリスト surveyDates
があります SurveyDate には回答のリスト
があります Response には属性 user があります

私の仕事は次のとおりです。メソッドにはパラメーター surveyId があり、それに応答したすべてのユーザーを返します。したがって、調査 --> 調査日 --> 回答 --> ユーザー

私はあなたにとって非常に簡単だと思います.私はSQLが初めてで、Hibernateも初めてです!

4

1 に答える 1

0

あなたのクエリは間違っているようです: ユーザー リストを期待している場合は、 from 句を user で開始する必要があります (ただし、マッピングを提供しなかったため、ユーザーと応答などの間に逆の関係を作成したことを期待しています)

このようなものでより良いはずです:

from user u
inner join u.responses as response 
inner join response.surveydates as surveydates
inner join surveydates.survey as survey
where survey.id = :surveyId
于 2012-11-08T20:59:47.227 に答える