java.lang.ClassCastException:[Ljava.lang.Object或LazyInitializationException

时间:2012-11-13 21:15:08

标签: java hibernate nhibernate named-query

我写这样的命名查询

<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>

当我得到结果时,我遇到了问题。当我只写from TestQuestion时,我会使用Question和TestQuestion对象得到List<Object[Object[]]>。当我写select tq时,我得到LazyInitializationException。我想获得List但不能。

已更新

我决定添加其他部分我的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>

我发现在Hibernate documentation

的文档中存在11.4.1.2. Queries that return tuples

我应该如何编写严格结果的命名查询?

1 个答案:

答案 0 :(得分:0)

我不明白你的问题。

您的查询(select tq from TestQuestion as tq...from TestQuestion)应该都返回List<TestQuestion>而不是List<Object[][]>

LazyInitializationException通常在发生延迟抓取时发生,但实体的相关会话已经关闭(请纠正我,如果我错了,只是从我的记忆中我认为是{{1} })。它与命名查询无关。请确保您的交易控制等设置正确。