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无法使用标识模式进行比较
@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);