JPA getSingleResult () не получил ни одной ошибки сущностей - PullRequest
0 голосов
/ 01 октября 2019

Я пишу обновления как часть тестирования CRUD, и когда я тестирую свой код, я получаю сообщение об ошибке, в котором говорится, что никакие объекты не найдены. Я понятия не имею, почему, потому что мой партнер сделал точно такой же код, и он работал отлично. Никто из нас не может понять, что происходит. Я получаю сообщение об ошибке в методе getSingleResult ().

    @Test
public void updateBookTest() {
    Book book = em.createQuery("select b from Book b where b.title = :title", Book.class).setParameter("title", "createABook").getSingleResult();

    tx.begin();
    book.setTitle("updatedThisBook");
    book.setAuthor("newAuthor");
    tx.commit();

    Book updatedBook = em.find(Book.class, book.getBookId());
    assertEquals(book.getTitle(), updatedBook.getTitle());
    assertEquals(book.getAuthor(), updatedBook.getAuthor());
    System.out.println("updateBookTest:\t" + book.toString());

    tx.begin();
    book.setTitle("createABook");
    tx.commit();        
}

Это мой код. Дайте мне знать, если потребуется дополнительная информация.

1 Ответ

0 голосов
/ 02 октября 2019

getSingleResult должен выдать NoResultException , если нет результата.

Итак, ваш тест в порядке.

Проверьте, что обаиспользуя ту же базу данных (и данные не возвращаются), оба выполняют один и тот же запрос, и оба используют одинаковые версии реализации jpa.

Из javadoc (начиная с jpa 1.0):

getSingleResult

java.lang.Object getSingleResult () : выполнить запрос SELECT, который возвращает один нетипизированный результат.

Возвращает: результат

Броски:

  • NoResultException - если нет результата

  • NonUniqueResultException - если более одного результата

  • IllegalStateException - если вызывается для оператора запроса языка постоянства Java UPDATE или оператора DELETE

  • QueryTimeoutException - если выполнение запроса превышает установленное значение тайм-аута запроса иоткат только оператора

  • TransactionRequiredException - если установлен режим блокировки и нет транзакции

  • PessimisticLockException - если сбой пессимистической блокировки и откат транзакции

  • LockTimeoutException - если сбой пессимистической блокировки и откат выполняется только оператор

  • PersistenceException - если выполнение запроса превышает установленное значение тайм-аута запроса и откат транзакции

Ссылка javadoc getSingleResult

Еще один момент: убедитесь, что ваш друг не звонит getResultList вместо getSingleResult . Этот метод возвращает список и не выдает исключение, если оно пустое.

Ссылка javadoc getResultList

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...