gpt4 book ai didi

java - 使用 Drools 规则进行实体验证

转载 作者:行者123 更新时间:2023-12-01 17:29:19 25 4
gpt4 key购买 nike

我可以使用 Drools 规则验证对象的主键值吗?假设我有一个名为 Person 的对象,它有两个主键 personId 和 PersonNumber 以及许多其他字段,如年龄、职业等。我需要创建一个 Drools 规则来验证对象 Person 进行主键验证(主键不应该为空) .

如果可能的话我还有一个疑问。我可以将 Drools 规则作为验证其他对象的通用规则吗(它应该是动态的,因为所有字段都与其他对象不同)。

如果有人对此有建议,请在此发表评论。

祝你编码愉快!

最佳答案

当然,您可以进行空检查。但是,如果这是要插入数据库的内容,则确实应该由数据库约束来处理。

无论如何,使用您的示例与一个对象 Person 和两个字段 personId 和 PersonNumber (忽略其他字段,因为它们不立即相关。)我将假设该类及其 getter 如下所示:

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

请注意,如果您想检查 personId 和 PersonNumber 是否都为 null,则规则会略有不同;您不会使用 || 运算符,而是使用逗号 and:

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

或者,如果我误解了您所说的主键不应该为空的意思,那么您希望字段为空,以便它们可以自动设置通过数据库,那么您可以通过将 exists 替换为 not 来将空检查反转为非空检查:

not( Person( personId == null || personNumber == null ))
not( Person( personId == null, personNumber == null ))

...或者将 == 交换为 !==

关于制定通用规则的问题,规则是不可能的,除非您正在验证的所有对象共享基类或接口(interface),并且获取主键的方法是基类/接口(interface)。在理论中,您可以使用反射并创建 Drools function将一组请求的字段映射到空检查,但这似乎是一个非常糟糕的主意并且非常脆弱。

关于java - 使用 Drools 规则进行实体验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61154268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com