Вы можете сделать нулевую проверку, конечно. Но если это что-то, вставляемое в базу данных, о котором действительно должны заботиться ограничения базы данных.
В любом случае, используя ваш пример с объектом Person и двумя полями personId и PersonNumber (игнорируя другие поля, потому что они ' это не имеет непосредственного отношения к делу.) Я буду считать, что класс и его методы получения выглядят так:
class Person {
private Integer personId, PersonNumber;
public Integer getPersonId() {
return personId;
}
public Integer getPersonNumber() {
return PersonNumber;
}
}
Затем вы можете написать правило, проверяющее, есть ли Person с personId или PersonNumber null:
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 равны нулю, правило будет немного другим; вы бы не использовали оператор ||
, а вместо этого использовали запятую и:
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
, такой, что вы хотите поля должны быть нулевыми, поэтому они могут быть автоматически установлены базой данных, тогда вы можете просто инвертировать нулевую проверку в ненулевую, либо заменив exists
на not
:
not( Person( personId == null || personNumber == null ))
not( Person( personId == null, personNumber == null ))
.. или путем замены ==
на !==
.
Что касается вашего вопроса о создании общего правила c, это невозможно с правилами, если только все проверяемые вами объекты не разделяют базовый класс или интерфейс, и метод для получения первичного ключа (ей) является частью базового класса / интерфейса. В теории вы могли бы использовать отражение и создать функцию Drools , чтобы сопоставить набор запрашиваемых полей с нулевой проверкой, но это кажется невероятно плохой идеей и чрезвычайно тяжелой agile.