使用hibernate时出现Drools错误

使用hibernate时出现Drools错误,hibernate,drools,Hibernate,Drools,我有一个drools项目,我必须连接到hibernate,这意味着我需要使用hibernate从数据库中读取事实 当我运行项目时,出现以下错误: java.lang.ArrayIndexOutOfBoundsException: -1 at org.eclipse.jdt.internal.compiler.parser.Parser.consumeCastExpressionWithNameArray(Parser.java:1984) at org.eclipse.jdt.

我有一个drools项目,我必须连接到hibernate,这意味着我需要使用hibernate从数据库中读取事实 当我运行项目时,出现以下错误:

 java.lang.ArrayIndexOutOfBoundsException: -1
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeCastExpressionWithNameArray(Parser.java:1984)
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:5992)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9272)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9500)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9457)
    at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8102)
    at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:696)
    at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:376)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:420)
    at org.drools.commons.jci.compilers.EclipseJavaCompiler.compile(EclipseJavaCompiler.java:389)
    at org.drools.commons.jci.compilers.AbstractJavaCompiler.compile(AbstractJavaCompiler.java:49)
    at org.drools.rule.builder.dialect.java.JavaDialect.compileAll(JavaDialect.java:371)
    at org.drools.compiler.DialectCompiletimeRegistry.compileAll(DialectCompiletimeRegistry.java:46)
    at org.drools.compiler.PackageRegistry.compileAll(PackageRegistry.java:102)
    at org.drools.compiler.PackageBuilder.compileAll(PackageBuilder.java:1006)
    at org.drools.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:842)
    at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:831)
    at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:467)
    at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:673)
    at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:45)
    at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:34)


at metier.testingRules.readKnowledgeBase(testingRules.java:61)
    at metier.testingRules.main(testingRules.java:33)
java.lang.ArrayIndexOutOfBoundsException: -1
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeCastExpressionWithNameArray(Parser.java:1984)
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:5992)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9272)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9500)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9457)
    at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8102)
    at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:696)
    at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:376)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:420)
    at org.drools.commons.jci.compilers.EclipseJavaCompiler.compile(EclipseJavaCompiler.java:389)
    at org.drools.commons.jci.compilers.AbstractJavaCompiler.compile(AbstractJavaCompiler.java:49)
    at org.drools.rule.builder.dialect.java.JavaDialect.compileAll(JavaDialect.java:371)
    at org.drools.compiler.DialectCompiletimeRegistry.compileAll(DialectCompiletimeRegistry.java:46)
    at org.drools.compiler.PackageRegistry.compileAll(PackageRegistry.java:102)
    at org.drools.compiler.PackageBuilder.compileAll(PackageBuilder.java:1006)
    at org.drools.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:842)
    at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:831)
    at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:467)
    at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:673)
    at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:45)
    at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:34)
    at metier.testingRules.readKnowledgeBase(testingRules.java:61)
    at metier.testingRules.main(testingRules.java:33)


what does that mean ? could anyone tell me how can I fix that ? 
thank you 

the .drl code is : 

    package metier.environnements

    import metier.taches.ActiviteProfessionnelle;
    import metier.taches.Utilisateur;



    rule "Réseaux_disponibles"  // donne les réseaux disponibles dans la localisation de l'utilisateur
    ruleflow-group "networks"
        when
          reseau :  Reseau (reseau.getCle == "mot")
        then
            System.out.println ("Réseaux disponibles");

    end
至于加载知识库的主文件:

package metier;


import java.util.Iterator;
import java.util.List;

import metier.environnements.Reseau;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.hibernate.Query;
import org.hibernate.Session;

import util.HibernateUtil;



/* This is a sample class to launch a rule. */

public class testingRules {
   public static final void main(String[] args) {
      try {
          Session session = HibernateUtil.getSessionFactory().getCurrentSession();
          session.beginTransaction();
         // load up the knowledge base
         KnowledgeBase kbase = readKnowledgeBase();
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();



         Query query=session.createQuery("from Reseau");
        List l =query.list();
        Iterator reseaux = query .iterate();

        while (reseaux.hasNext()) {

            Reseau reseau = (Reseau) reseaux.next();
            ksession.insert(reseau);

        }

         ksession.fireAllRules();



      } catch (Throwable t) {
         t.printStackTrace();
      }
   }

   private static KnowledgeBase readKnowledgeBase() throws Exception {

      KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

      kbuilder.add(ResourceFactory.newClassPathResource("Reseau.drl"), ResourceType.DSLR);

      KnowledgeBuilderErrors errors = kbuilder.getErrors();

      if (errors.size() > 0) {
         for (KnowledgeBuilderError error: errors) {
            System.err.println(error);
         }
         throw new IllegalArgumentException("Could not parse knowledge.");
      }

      KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
      kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

      return kbase;
   }
}

根据您提供的stacktrace,创建知识库时会发生异常。你能分享一下你在知识库中使用的规则吗?谢谢你的回答,它现在可以使用帖子中提供的规则工作了,我使用了getter$reseau.getCle==mot,我把代码放在一个新项目中,它工作了,同样的代码在其他项目中不工作,我觉得很奇怪,但重要的是它工作了,再次感谢你