Проверка сущности с использованием правила Drools - PullRequest
0 голосов
/ 11 апреля 2020

Могу ли я проверить объект для значений первичного ключа, используя правило Drools? Предположим, у меня есть один объект с именем Person с двумя первичными ключами personId и PersonNumber и многие другие поля, такие как age, профессия и т. Д. c. Мне нужно создать правило Drools для проверки объекта Person для проверки первичного ключа (первичный ключ не должен быть не нулевым).

, если это возможно, у меня есть еще одно сомнение. Могу ли я сделать правило Drools в качестве общего правила c для проверки и других объектов (оно должно быть динамическим c, поскольку все поля будут отличаться по отношению к другому объекту).

Если у кого-то есть предложения по этому вопросу пожалуйста, оставьте комментарий здесь.

Счастливое кодирование !!

1 Ответ

0 голосов
/ 12 апреля 2020

Вы можете сделать нулевую проверку, конечно. Но если это что-то, вставляемое в базу данных, о котором действительно должны заботиться ограничения базы данных.

В любом случае, используя ваш пример с объектом 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.

...