xml 文件中的 OGM 和 ORM 命名查询
OGM and ORM named queries in xml file
我的应用程序同时包含 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 文件中。
该查询是针对关系数据库的,因此您不需要 OGM。
你为什么要 运行 一个针对 OGM 的 SQL 查询,这是针对 NoSQL?
默认的 hibernate.archive.autodetection
属性 值为 class,hbm
,因此请确保在与 OGM 关联的 persistence.xml
文件中将其设置为 class
实体管理器工厂。您确实有两个单独的 persistence.xml
配置(一个用于 ORM,一个用于 OGM),对吗?
根据当前版本的 OGM(5.0) 功能文档:
模型不可能在 OGM 和 ORM 之间共享,这预计将在下一版本的 OGM 中解决。
ORM 类 可以尝试解析 .hbm.xml 文件并找到具有 mongo 查询语法的命名查询。所以在读取文件时 OGM 无法解析 SQL 命名查询的语法并抛出错误所以我只能将所有查询转移到另一个 hbm 中,其 wntry 不会出现在 nosql_hibernate.xml 文件中所以 OGM 将不会解析,我的代码将 运行 快速,否则直到此功能不支持转移到另一个框架。
我的应用程序同时包含 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 文件中。
该查询是针对关系数据库的,因此您不需要 OGM。 你为什么要 运行 一个针对 OGM 的 SQL 查询,这是针对 NoSQL?
默认的 hibernate.archive.autodetection
属性 值为 class,hbm
,因此请确保在与 OGM 关联的 persistence.xml
文件中将其设置为 class
实体管理器工厂。您确实有两个单独的 persistence.xml
配置(一个用于 ORM,一个用于 OGM),对吗?
根据当前版本的 OGM(5.0) 功能文档: 模型不可能在 OGM 和 ORM 之间共享,这预计将在下一版本的 OGM 中解决。
ORM 类 可以尝试解析 .hbm.xml 文件并找到具有 mongo 查询语法的命名查询。所以在读取文件时 OGM 无法解析 SQL 命名查询的语法并抛出错误所以我只能将所有查询转移到另一个 hbm 中,其 wntry 不会出现在 nosql_hibernate.xml 文件中所以 OGM 将不会解析,我的代码将 运行 快速,否则直到此功能不支持转移到另一个框架。