2 Stimmen

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

Ich schreibe benannte Abfrage wie folgt

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

Und wenn ich das Ergebnis erhalte, habe ich ein Problem. Wenn ich nur schreibe from TestQuestion Ich bekomme List<Object[Object[]]> mit den Objekten Question und TestQuestion. Wenn ich schreibe select tq Ich bekomme LazyInitializationException . Ich möchte List bekommen, kann es aber nicht.

AKTUALISIERT

Ich habe beschlossen, meinen hbm um weitere Teile zu ergänzen.

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

Ich finde, dass es 11.4.1.2. Queries that return tuples in der Dokumentation von Hibernate Dokumentation

Wie sollte ich eine benannte Abfrage für ein richtiges Ergebnis schreiben?

0voto

Adrian Shum Punkte 36692

Ich verstehe Ihr Problem nicht.

Ihre Anfrage ( select tq from TestQuestion as tq... y from TestQuestion ) sollten beide zurückgeben List<TestQuestion> anstelle von List<Object[][]>

LazyInitializationException treten normalerweise auf, wenn ein Lazy-fetching stattfindet, aber die zugehörige Sitzung der Entität bereits geschlossen ist (bitte korrigieren Sie mich, wenn ich falsch liege, nur aus meiner bloßen Erinnerung heraus dachte ich, es sei LazyInitializationException ). Es hat nichts mit der benannten Abfrage zu tun. Bitte stellen Sie sicher, dass Ihre Transaktionssteuerung usw. korrekt eingerichtet ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X