Drools JPA实体对象图更新
定义Drools规则时,适应对象图的最佳方式是什么 假设我有以下具有多对多关系的实体对象图:Drools JPA实体对象图更新,jpa,entity,drools,object-graph,Jpa,Entity,Drools,Object Graph,定义Drools规则时,适应对象图的最佳方式是什么 假设我有以下具有多对多关系的实体对象图: User <- Group -> Value 我可以按如下方式在ksession中插入用户: //build user... User user = new User(); Group group = new Group(); Value value = new Value("Purple"); group.setValue(value); user.addGroup(group); k
User <- Group -> Value
我可以按如下方式在ksession中插入用户:
//build user...
User user = new User();
Group group = new Group();
Value value = new Value("Purple");
group.setValue(value);
user.addGroup(group);
ksession.insert(user);
然后更新它们:
ksession.update(ksession.getFactHandle(user), user);
但是,如果我将Value对象直接更改为
“Orange”
,该值没有FactHandle,因为它是以用户作为根插入的。有没有更好的方法来定义规则并插入实体,这样我就可以独立地修改实体,Drools将评估结果?您必须做出自己的选择。正如你在文章中提到的,你不能更新一些不真实的东西。插入()的每个对象都是事实,但嵌套对象并非如此。
处理嵌套对象的一种方法是执行刚才所做的操作:使用from模式。正如您所描述的,这种模式的问题在于,您始终必须更新()与您正在修改的真实对象相关的事实对象。如果你能接受,那就去做吧。
另一种处理方法是将每个对象作为事实插入:用户、组和值。这可能会使插入代码更脏,但您将获得灵活性、可读性,并在某种程度上提高规则的性能。
所以,这里没有神奇的配方。您必须使用对您的场景更方便的方法
希望能有所帮助,是否有办法以不同的方式定义“发件人”规则,这样我就可以独立插入用户、组和值,并让drools进行关联?实体之间的关系必须以某种方式存在:通过代码中的引用(对象)或值(id)。然后,您可以将每个用户、组和值作为单独的事实插入,并编写规则,而不使用“from”,而是编写有关事实关系的约束:when$u:User()$g:Group(this memberof$u.groups)$v:Value(this memberof$g.values)我上一条消息中的缩进是一团乱。在这里,您有一个更友好的格式相同的规则:我开始认为我应该设置规则,以遵循关系的“所有权”方面,例如,如果组拥有对用户和值的引用:。这是否在正确的轨道上?“==”通常比“memberof”更有效,因此,如果模型中的关系是双向的,我将继续使用您的方法。
ksession.update(ksession.getFactHandle(user), user);