1

私のアプリケーションには、ORM と OGM の両方が含まれています。ORM については、xyz.hbm.xml にいくつかの名前付きクエリを作成しました。しかし、OGM を使用しているときに、これらのクエリで例外が発生しました。OGM 4.1.3.Final バージョンを使用しています。誰か助けてください。

example.hbm.xml

<?xml version="1.0" ?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Jan 1, 2015 1:53:57 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="mkcl.os.apps.edumiss.model.student.Admission" table="ADMISSION">
        <id name="id" type="java.lang.String">
            <column name="ADMISSION_ID" />
            <generator class="uuid" />
        </id>
        <property name="studentId">
            <column name="STUDENTID" />
        </property>

        <property name="schoolId">
            <column name="SCHOOL_ID" />
        </property>

        <property name="academicYearId" type="int">
            <column name="ACADEMICYEARID" />
        </property>
        <property name="sectionRollNumber" type="int">
            <column name="SECTIONROLLNUMBER" />
        </property>

        <property name="admissionDate" type="java.util.Date">
            <column name="ADMISSIONDATE" />
        </property>

        <property name="schoolLeavingDate" type="java.util.Date">
            <column name="SCHOOL_LEAVING_DATE" />
        </property>

        <property name="standardId" type="short">
            <column name="STANDARDID" />
        </property>
        <property name="standardName" type="java.lang.String">
            <column name="STANDARD_NAME" />
        </property>

        <property name="sectionId">
            <column name="SECTION_ID" />
        </property>

        <property name="sectionName">
            <column name="SECTION_NAME" />
        </property>

        <property name="reasonForLeaving">
            <column name="REASON_FOR_LEAVING" />
        </property>

        <property name="streamId" type="short">
            <column name="STREAM_ID" />
        </property>

        <property name="streamName" type="java.lang.String">
            <column name="STREAM_NAME" />
        </property>

        <property name="admissionType" column="ADMISSION_TYPE">
            <type name="org.hibernate.type.EnumType">
                <param name="useNamed"></param>
                <param name="enumClass">mkcl.os.apps.edumiss.model.student.AdmissionType</param>
            </type>
        </property>

        <property name="createdBy" type="java.lang.String">
            <column name="CREATED_BY" />
        </property>

        <property name="createOn" type="java.util.Date">
            <column name="CREATED_ON" />
        </property>

        <property name="modifiedBy" type="java.lang.String">
            <column name="MODIFIED_BY" />
        </property>

        <property name="lastModified" type="java.util.Date">
            <column name="LAST_MODIFIED" />
        </property>

        <property name="patternId" type="integer">
            <column name="PATTERN_ID"></column>
        </property>

    </class>

    <sql-query name="getAdmissionForAcademicYear">
        <return alias="admission" class="mkcl.os.apps.edumiss.model.student.Admission"></return>
        <![CDATA[
        SELECT
        {admission.*}
        FROM
        ADMISSION admission
        INNER JOIN STUDENT s
        ON
        s.CURRENT_ADMISSION_ID = admission.ADMISSION_ID
        WHERE
        admission.STUDENTID = :mkclIdentificationNumber
        AND
        admission.ACADEMICYEARID = :academicYearId
        ]]>
    </sql-query>
</hibernate-mapping>

これはスローします

java.lang.IncompatibleClassChangeError: class org.objectweb.asm.tree.ClassNode has interface org.objectweb.asm.ClassVisitor as super class

上記のクエリを hbm ファイルから削除すると、正常に機能しました。しかし、これらのクエリを .hbm.xml ファイルにそのまま保持する必要があります。

4

2 に答える 2

1

そのクエリはリレーショナル データベース用であるため、そのための OGM は必要ありません。NoSQL 用の OGM に対して SQL クエリを実行する必要があるのはなぜですか?

デフォルトのhibernate.archive.autodetectionプロパティ値はであるため、OGM EntityManagerFactory に関連付けられているファイルで必ずclass,hbmに設定してください。2 つの個別の構成 (ORM 用と OGM 用) がありますね。classpersistence.xmlpersistence.xml

于 2016-01-04T10:57:28.097 に答える
0

現在のバージョンの OGM(5.0) フィーチャー ドキュメントによると、モデルは OGM と ORM の間で一緒に共有できません。これは、OGM の次のバージョンで解決される予定です。

ORM クラスは .hbm.xml ファイルの解析を試行し、mongo クエリの構文を持つ名前付きクエリを見つけることができます。そのため、ファイルの読み取り中に OGM がクエリという名前の SQL の構文を解析できず、エラーがスローされるため、すべてのクエリを別の hbm にシフトする方法しかありません。その wntry は nosql_hibernate.xml ファイルに存在しないため、OGM は解析せずこの機能が別のフレームワークへの移行をサポートしなくなるまで、私のコードは高速に実行されます。

于 2016-01-12T16:58:54.720 に答える