Как я могу перезагрузить свои объекты, зависящие от спящего режима, перед отменой проверки

#spring #hibernate #spring-mvc

#весна #спящий режим #spring-mvc

Вопрос:

У меня есть контроллер Spring с кодом, подобным:

 @RequestMapping("save")
public String save(@ModelAttribute @Valid Form form, BindingResult result){     

    if( result.hasErrors()){
    [...]
  

Моя форма содержит список объектов гибернации. У всех установлены их свойства. Я создаю форму редактирования HTML и в контроллере обнаруживаю, что все объекты в отношениях ManyToOne потеряны. У меня есть только идентификатор. Я мог бы перезагрузить данные из базы данных, но уже слишком поздно для проверки, вызванной аннотацией @valid.

 public class Form{

@Valid
@NotNull
private List<Item> item;

@NotNull
private Foo foo;
  

[…]

И элемент

 @Entity
@Table(name = "item")
@XmlRootElement
public class Item{

    @ManyToOne()
    @JoinColumn(name = "dependent", referencedColumnName = "id", nullable = false)
    @NotNull
    private Dependent dependent;

    @NotNull
    private Currency currency;
  

Как я мог бы установить зависимые поля и поля валюты перед проверкой? Есть ли какая-либо альтернатива перезагрузке данных из базы данных?

(Отказ от ответственности некоторые имена были изменены для защиты inocent)

Комментарии:

1. Попробуйте @LazyCollection(LazyCollectionOption. ЛОЖЬ)

2. Я имею в виду для вашего Dependent . LazyCollectionOption

3. Это решило некоторые из моих проблем, но не все. Форма может добавлять новые элементы, отделенные от базы данных.

Ответ №1:

Если вы используете Spring-Data-JPA, вы можете зарегистрироваться DomainClassConverter , чтобы выполнить эту работу за вас. В другом случае вы можете написать такой конвертер самостоятельно.

Комментарии:

1. Извините за отсутствие обратной связи. Весенние серверы, похоже, не работают.

Ответ №2:

Я нашел один способ сделать это:

  1. Добавьте в контроллер ссылку на SmartValidator.

    @Autowired частный валидатор SmartValidator;

  2. Удалите аннотацию @valid. Перезагрузите все таблицы ManyToOne и вручную вызовите средство проверки.

    @RequestMapping («сохранить») сохранение общедоступной строки (форма формы @ModelAttribute, результат привязки){

    for(Item item : form.GetItems()){ item.setDependant( MyDao.reload(item.getDependent()));
    }

    validator.validate (форма, результат);

    if( result.hasErrors()){ […]