Java getFactHandle方法为Drools中的任何事实返回null

Java getFactHandle方法为Drools中的任何事实返回null,java,spring-boot,drools,kie,Java,Spring Boot,Drools,Kie,我有以下代码: KieSession kSession = JPAKnowledgeService.loadStatefulKnowledgeSession(someId, kieBase, null, env) for (FactHandle f : kSession.getFactHandles()) { Object sessionObject = kSession.getObject(f); logger.info(String.format("Fact: %s",

我有以下代码:

KieSession kSession = JPAKnowledgeService.loadStatefulKnowledgeSession(someId, kieBase, null, env)

for (FactHandle f : kSession.getFactHandles()) {
    Object sessionObject = kSession.getObject(f);
    logger.info(String.format("Fact:  %s", sessionObject.toString()));
}

kSession.insert(someFact);

// Let's loop again to see if our fact is indeed there
for (FactHandle f : kSession.getFactHandles()) {
    Object sessionObject = kSession.getObject(f);
    logger.info(String.format("Fact:  %s", sessionObject.toString()));
}

// Do something else with someFact, insert it into some db

// factHandle is null
FactHandle factHandle = kSession.getFactHandle(someFact);
基本上,我正在加载我的持久会话,向其中添加一个事实,通过事实循环检查新添加的事实是否确实存在,但当我尝试将其取回时,
factHandle
对象为空。我正在尝试将Drools与基于身份的断言模式结合使用。因此,我的相关问题是:

  • 为什么我的事实句柄为空?
    someFact
    在内存中的位置可能在
    中发生了更改,使用someFact执行其他操作,将其插入某个db
    阶段,是否会对问题产生影响
  • 口水是如何比较身份的?我在我的
    someFact
    对象上有一个
    private long id
    文件,用
    @id
    注释
  • 我正在创建我的
    KieContainer
    KieBase
    ,如下所示:
  • ```

    ```

    如果我必须切换到基于相等的断言,我已经在我的对象上实现了
    equals
    hashCode
    方法,但是找不到将我的
    KieBase
    断言定义为
    equality
    的方法。我该怎么做

  • 只要在
    中更改内存中
    someFact
    的位置,对someFact执行其他操作,将其插入某个数据库中,就会产生效果,因此Drools无法使用标识模式进行比较
  • 内存中的位置。不是Javax
    @Id
    注释
  • 以下是如何将引擎置于相等模式:

    KieBaseConfiguration kieBaseConfiguration = kieServices().newKieBaseConfiguration();
        kieBaseConfiguration.setOption(EqualityBehaviorOption.EQUALITY);
        return kieContainer().newKieBase(kieBaseConfiguration);
    
  • KieBaseConfiguration kieBaseConfiguration = kieServices().newKieBaseConfiguration();
        kieBaseConfiguration.setOption(EqualityBehaviorOption.EQUALITY);
        return kieContainer().newKieBase(kieBaseConfiguration);