我写这样的命名查询
<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
我应该如何编写严格结果的命名查询?
答案 0 :(得分:0)
我不明白你的问题。
您的查询(select tq from TestQuestion as tq...
和from TestQuestion
)应该都返回List<TestQuestion>
而不是List<Object[][]>
LazyInitializationException
通常在发生延迟抓取时发生,但实体的相关会话已经关闭(请纠正我,如果我错了,只是从我的记忆中我认为是{{1} })。它与命名查询无关。请确保您的交易控制等设置正确。