Используя правила для одной сущности, можно ли в drools вызывать методы, связанные со второй сущностью?
Используя загрузку Spring, у меня есть следующая сущность Task.
@Entity
public class Task extends AbstractPersistable<Long> {
private String title;
private String description;
@ManyToOne
@JoinColumn(name = "assignee_group_id")
private UserGroup assigneeGroup;
@Enumerated(EnumType.STRING)
private TaskType type;
//getters and setters
}
И сущность UserGroup
@Entity
public class UserGroup extends AbstractPersistable<Long> {
private String name;
@OneToMany(targetEntity = Task.class, mappedBy = "assigneeGroup", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<Task> tasks;
//getters and setters
}
Перечисление TaskType определено как
public enum TaskType {
STORE("Store"), ACCOUNTS("Accounts");
private String formattedName;
TaskType(String formattedName) {
this.formattedName = formattedName;
}
public String getFormattedName() {
return formattedName;
}
}
У меня также есть две группы пользователей Store
и Accounts
вбаза данных.Теперь то, что я хочу сделать, - это когда пользователь создает Task
типа Accounts
, я хотел бы установить группу уполномоченных как группу Accounts
, и аналогично для Task
типа Store
.
Я определил правила как
rule "Task for Store"
when
taskObject: Task(type.formattedName=="Store")
then
System.out.println("task for store invoked");
end
rule "Task for Accounts"
when
taskObject: Task(type.formattedName=="Accounts")
then
System.out.println("task for accounts invoked");
end
Это прекрасно работает.Но теперь я хочу сделать что-то вроде
rule "Task for Store"
when
taskObject: Task(type.formattedName=="Store")
then
//find user group with name Store
//set this user group as the assignee group
end
rule "Task for Accounts"
when
taskObject: Task(type.formattedName=="Accounts")
then
//find user group with name Accounts
//set this user group as the assignee group
end
Пока что я нашел только примеры, которые либо распечатывали сообщение в файле правил drools, как я это делал выше, либо вызывали сеттеры для полей примитивного типа данных.,Как я могу (или вообще возможно) вызывать сеттеры для полей, ссылающихся на другую сущность?Пожалуйста, дайте мне знать, если это даже не считается лучшей практикой.Я только начинаю пускать слюни, поэтому у меня нет особых идей.