2

私はこのような名前付きクエリを書きます

<query name="GET_QUESTIONS_BY_TEST_ID">select tq from TestQuestion as tq inner join tq.question as
        q
        where
        tq.testQuestionIdentifer.versionId=(select
        max(tq.testQuestionIdentifer.versionId) from TestQuestion tq_inner
        where
        tq_inner.testQuestionIdentifer.testId=:testId) and
        tq.testQuestionIdentifer.testId=:testId
    </query>

そして、私が結果を得るとき、私は問題を抱えています。私が書くとき、私はQuestionオブジェクトとTestQuestionオブジェクトfrom TestQuestionを取得します。List<Object[Object[]]>私が書くとき、私 select tqは得るLazyInitializationException。リストを取得したいのですが、取得できません。

更新しました

私は自分のhbmの他の部分を追加することにしました

<class name="by.bsuir.testapp.model.TestQuestion" table="TEST_QUESTION"
        lazy="true">
        <composite-id name="testQuestionIdentifer"
            class="by.bsuir.testapp.model.TestQuestionIdentifer">
            <key-property name="testId" column="TEST_ID" />
            <key-property name="versionId" column="VERSION_ID" />
            <key-property name="questionId" column="QUESTION_ID" />
        </composite-id>
        <many-to-one name="question" class="by.bsuir.testapp.model.Question"
            fetch="join" insert="false" update="false">
            <column name="QUESTION_ID" />
        </many-to-one>
    </class>

11.4.1.2. Queries that return tuplesHibernateドキュメントのドキュメントに存在することがわかりました

厳密な結果を得るために名前付きクエリを作成するにはどうすればよいですか?

4

1 に答える 1

0

私はあなたの問題を理解していません。

クエリ (select tq from TestQuestion as tq...および)の代わりにfrom TestQuestion両方を返す必要がありますList<TestQuestion>List<Object[][]>

LazyInitializationException通常、遅延フェッチが発生しているときに発生しますが、エンティティの関連するセッションは既に閉じられています (間違っている場合は修正してください。私の裸の記憶からだと思いましたLazyInitializationException)。名前付きクエリとは関係ありません。トランザクション管理などが正しく設定されていることを確認してください。

于 2012-11-14T02:27:32.897 に答える