我可以使用Drools规则验证对象的主键值吗?假设我有一个名为Person的对象,它具有两个主键personId和PersonNumber以及许多其他字段,例如年龄,职业等。我需要创建Drools规则来验证对象Person进行主键验证(主键不应为null) 。
如果可能的话,我还有一个疑问。我是否也可以将Drools规则作为验证其他对象的通用规则(它应该是动态的,因为所有字段相对于其他对象都会有所不同)。
如果有人对此有任何建议,请在这里发表评论。
快乐编码!
您当然可以进行空检查。但是,如果这是要插入到数据库中的东西,则应该由数据库约束来真正解决。
无论如何,将您的示例与对象Person和两个字段personId和PersonNumber一起使用(忽略其他字段,因为它们并不直接相关。)我将假定该类及其获取器如下:
class Person {
private Integer personId, PersonNumber;
public Integer getPersonId() {
return personId;
}
public Integer getPersonNumber() {
return PersonNumber;
}
}
然后,您可以编写一条规则来检查是否有一个PersonId或PersonNumber为null的Person:
rule "Person with either personId or PersonNumber null"
when
exists( Person( personId == null || personNumber == null ))
then
System.out.println("Person has either null personId or PersonNumber");
end
请注意,如果您要检查both personId和PersonNumber是否为空,则规则将有所不同;您不使用||
运算符,而是使用逗号和:
rule "Person with both personId and PersonNumber null"
when
exists( Person( personId == null, personNumber == null ))
then
System.out.println("Person has null personId and null PersonNumber");
end
或者,如果我误解了Primary key shouldn't be not null
的含义,以致您[[want这些字段为空,以便可以由数据库自动设置它们,那么您可以将空检查反转为不为空通过将exists
替换为not
进行检查:
not( Person( personId == null || personNumber == null ))
not( Person( personId == null, personNumber == null ))
...或通过将中,您可以使用反射并创建Drools function来将一组请求的字段映射为null检查,但这似乎是一个非常糟糕的主意,而且非常脆弱。==
交换为!==
。关于您制定通用规则的问题,除非您要验证的所有对象都共享一个基类或接口,并且获取主键的方法是该基础的一部分,否则使用规则是不可能的类/接口。在
theory