2015-10-29 4 views
1

Использования логического переменного планирования, определенные в сущности планирования, как:Optaplanner IllegalArgumentException: valueRangeProviderRef не появляется в valueRangeProvideIds

@PlanningVariable(nullable = true, valueRangeProviderRefs = {"selectedRange"}) 
public Boolean getSelected() { 
    return selected; 
} 

public void setSelected(Boolean selected) { 
    this.selected = selected; 
} 

и в решении планирования я определить поставщик диапазона значений как:

@ValueRangeProvider(id = "selectedRange") 
List<Boolean> getValueRange() { 
    return Arrays.asList(Boolean.FALSE, Boolean.TRUE); 
} 
public List<Boolean> getBooleanList() { 
    return selectedList; 
} 

public void setBooleanList(List<Boolean> selectedList) { 
    this.selectedList = selectedList; 
} 

Я получил следующее сообщение об ошибке:

Exception in thread "AWT-EventQueue-0"
java.lang.IllegalArgumentException:

The entityClass has a PlanningVariable annotated property (selected) with a valueRangeProviderRef (selectedRange) that does not exist on a registered PlanningSolution or PlanningEntity .

The valueRangeProviderRef (selectedRange) does not appear in valueRangeProvideIds ([]).

Я не могу признать причины проблемы.

ответ

0

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

A) Если вы используете 6.3.0.Final или более поздний, ваш код должен работать. Если вы используете более старую версию, это, вероятно, потому, что метод getValueRange() не является общедоступным (6.3 исправляет, что IIRC).

B) Если метод getValueRange() определен на суперклассе, а не на фактическом классе решения планирования, он будет работать только в том случае, если этот суперкласс также считается подходящим классом решения для планирования IIRC.

+1

Спасибо, хороший ответ. Я использую версию 6.2.0, я добавил публикацию в список getValueRange(), и ошибка исчезла. –

Смежные вопросы