2016-01-04 2 views
1

Mon application contient à la fois ORM et OGM. Pour ORM, j'ai écrit des requêtes nommées dans xyz.hbm.xml. Mais tout en utilisant OGM ces requêtes provoquées par l'exception. J'utilise OGM 4.1.3.Final version. S'il vous plaît, aidez quelqu'un.Requêtes nommées OGM et ORM dans le fichier xml

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> 

ce throws

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

si je retire ci-dessus requête à partir du fichier HBM puis il a bien fonctionné. Mais je dois garder ces requêtes dans le fichier .hbm.xml tel qu'il est.

+0

Quelque chose avec les dépendances dans votre projet semble incorrect. Pourriez-vous partager votre chemin de classe runtime et la pile complète pour que nous puissions voir d'où ça vient? – Gunnar

Répondre

0

selon la version actuelle de OGM (5.0) document de fonctionnalité: Le modèle ne peut pas être partagé entre OGM et ORM ensemble et cela sera résolu dans la prochaine version d'OGM.

Les classes ORM peuvent essayer d'analyser le fichier .hbm.xml et trouver les requêtes nommées ayant la syntaxe de requête mongo. donc en lisant le fichier OGM incapable d'analyser la syntaxe de requête SQL nommée et jette une erreur afin que je n'ai que le moyen de déplacer toutes les requêtes dans un autre hbm dont wntry ne sera pas présent dans le fichier nosql_hibernate.xml afin OGM ne pas analyser et mon code fonctionnera rapidement jusqu'à ce que cette fonctionnalité ne prenne pas en charge le passage à un autre cadre.

1

Cette requête concerne une base de données relationnelle, vous n'avez donc pas besoin de l'OGM pour cela. Pourquoi voulez-vous exécuter une requête SQL contre OGM, qui est pour NoSQL?

La valeur par défaut hibernate.archive.autodetection valeur de la propriété est class,hbm, assurez-vous de mettre à class dans le fichier persistence.xml qui est associé à la EntityManagerFactory annonce. Vous avez deux configurations persistence.xml distinctes (une pour ORM et une pour OGM), n'est-ce pas?

+0

Je ne souhaite pas exécuter cette requête pour OGM. J'ai mentionné que mon application avait une connexion ORM et OGM. Dans un autre scénario je veux utiliser cette requête (environ 1000 de telles requêtes déjà présentes dans mon application). Mais selon le nouveau scénario, j'ai besoin d'intégrer l'application avec mongodb en utilisant l'ancien modèle et hbm.xml. Donc c'était nécessaire. Il s'exécute avec ORM lui-même (avec mysql). –

+0

Je pense qu'il devrait y avoir EntityManagerFcatories séparé pour ORM et OGM afin qu'ils ne devraient pas entrer en collision. Pour OGM, vous ne devriez pas lui permettre d'inspecter les fichiers hbml du tout. –

+0

Oui, j'ai créé EntityManager séparé, mais lors de la création de sessionFactory pour mongodb, il analyse l'ensemble du fichier .hbm.xml mentionné dans hibernate_mongoDB.cfg.xml. Et qui pourrait briser le code. –