Я пытаюсь изменить объект, у которого есть список объектов, сопоставленных с ним как отношение «один ко многим», но он продолжает сбой со следующей ошибкой.
[Ошибка обработки запроса;вложенное исключение - org.springframework.beans.InvalidPropertyException: недопустимое свойство 'storeClosureCashSet [0]' класса бина [application.model.StoreClosure]: получатель для свойства 'storeClosureCashSet' вызвал исключение;Вложенное исключение - java.lang.reflect.InvocationTargetException] с основной причиной
java.lang.NullPointerException: null
Я пробовал несколько других вариантов, но просто не будуРабота.Я не могу изменить список, мне нужно, чтобы он оставался как набор.
Когда я загружаю страницу, входы устанавливаются правильно, и все отображается так, как должно, но ошибка всегда возникает при отправкеформа.Вы можете проверить мой код ниже.
Итак, я получил следующую форму в Thymeleaf.
<form form id="closure-form" th:object="${closure}" th:action="@{/url}" method="post">
<input hidden="hidden" th:field=*{id}/>
<!-- Some other fields -->
<div class="full-width align-center no-margins">
<th:block th:each="item, cashStat : *{storeClosureCashSet}">
<div class="half-width no-margins align-center">
<input hidden="hidden" class="hidden" th:field="*{storeClosureCashSet[__${cashStat.index}__].storeClosureCashPK}"/>
<input hidden="hidden" class="hidden" th:field="*{storeClosureCashSet[__${cashStat.index}__].storeClosureFK}"/>
<input hidden="hidden" class="hidden" th:field="*{storeClosureCashSet[__${cashStat.index}__].exchangeRate}"/>
<input hidden="hidden" class="hidden" th:field="*{storeClosureCashSet[__${cashStat.index}__].currency}"/>
<input class="minimalist-input minimalist-number-input minimalist-number-format align-center currency-crc" th:field="*{storeClosureCashSet[__${cashStat.index}__].amount}"/>
</div>
</th:block>
</div>
</form>
Вот код сущности.
public class StoreClosure {
private Long id;
// Some other fields.
// Getters and setters of some other fields.
private Set<StoreClosureCash> storeClosureCashSet;
public Set<StoreClosureCash> getStoreClosureCashSet() {
return new HashSet<StoreClosureCash>(this.storeClosureCashSet);
}
}
Моя конфигурация Hibernate.
<hibernate-mapping>
<class name="application.model.StoreClosure" table="STORE_CLOSURE" schema="dbo" catalog="DB">
<id name="storeClosurePK">
<column name="id" sql-type="bigint"/>
<generator class="identity"/>
</id>
<!-- Some other fields -->
<set name="storeClosureCashSet" inverse="true" lazy="true" fetch="join">
<key>
<column name="store_closure_fk" sql-type="long" not-null="true"/>
</key>
<one-to-many class="application.model.StoreClosureCash"/>
</set>
</hibernate-mapping>
И это будет код моего контроллера.
@PostMapping(value = "/url")
public String updateStoreClosure(@ModelAttribute StoreClosure storeClosure) {
// Some code.
return "page";
}
Мне действительно нужно понять, что происходит.Ваша помощь очень ценится.