Изменяющие запросы могут использовать только void или int / Integer в качестве типа возврата - PullRequest
0 голосов
/ 19 октября 2019

Я получаю java.lang.IllegalArgumentException: модифицирующие запросы могут использовать void или int / Integer в качестве возвращаемого типа, когда я пытаюсь обновить свою таблицу.

1. thymeleaf

 <div class="form-popup" id="myForm">
 <form  action=""th:action="@{/searchreader(reader_id=${givebook?.getReader()?.getI dNumber()}, book_id=${givebook?.getId()})}"  th:object="${givebook}" class="form-container">

            <label for="book_id"><b>Book ID</b></label>
            <input type="text" name="id" th:value="${reader?.idNumber}" placeholder="Reader ID" hidden/>
            <input type="text"  th:value="${givebook?.getId()}" placeholder="Enter Book ID" name="book_id" required>

            <button type="submit" class="btn">OK</button>
            <button type="button" class="btn cancel" onclick="closeForm()">Close</button>
        </form>
    </div>

2.Controller

 @GetMapping({"/searchreader","/searchreader{id}","/searchreader{id}/{book_id}"})
    public String searchReaderById(@RequestParam("id") Optional<Long> id, @RequestParam("book_id") Optional<Long> book_id, Model model){

        if(id.isPresent()&&book_id.isPresent()){
            model.addAttribute("givebook",bookRepository.updateBookSetReaderId(id.get(),book_id.get()));
            return "reader/searchreader";
        }
        else
        if(id.isPresent()) {
            Reader reader = readerService.findReaderByIdNumber(id.get());
            model.addAttribute("reader", reader);
            model.addAttribute("messages",readerService.getMessages());

            return "reader/searchreader";
        } else
        {
            return "reader/searchreader";}
        }

3.Repository

    @Transactional
    @Modifying(clearAutomatically = true, flushAutomatically = true)
    @Query(value = "update Book set reader_id=(select r.id from reader r where r.id_Number=:reader_id) where id=:book_id",nativeQuery = true)
    Book updateBookSetReaderId(Long reader_id,Long book_id);

В то время как обновленный оператор возвращаетизмененные строки метода в репозитории должны возвращать void или integer, но когда я изменяю возвращаемый тип void или integer, тогда мой контроллер не работает и мой шаблон тимелист не работает, пока я использую методы из класса Book.

Пожалуйста, любая идея. Спасибо.

1 Ответ

0 голосов
/ 03 ноября 2019

В хранилище

@Transactional
@Modifying(clearAutomatically = true, flushAutomatically = true)
@Query(value = "update Book set reader_id=(select r.id from reader r where r.id_Number=:reader_id) where id=:book_id",nativeQuery = true)
Integer updateBookSetReaderId(Long reader_id,Long book_id);

Book findBookByBookId(Long bookId);

В контроллере

    if(id.isPresent()&&book_id.isPresent()){
        Book getBook = null;
        Integer updatedRow = bookRepository.updateBookSetReaderId(id.get(),book_id.get());
        if(updatedRow > 0){
        getBook = bookRepository.findBookByBookId(book_id.get());
        }
        model.addAttribute("givebook",getBook);
        return "reader/searchreader";
    }
...