Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools JPA实体对象图更新_Jpa_Entity_Drools_Object Graph - Fatal编程技术网

Drools JPA实体对象图更新

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

定义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);

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);