Spring Data JPA метод findById (), возвращающий ноль вместо пустого Необязательно - PullRequest
0 голосов
/ 27 июня 2018

У меня есть метод, использующий Spring Data. Метод findById () JPA должен возвращать Optional. Однако, если сущность не найдена по указанному идентификатору, она возвращает null вместо Пустого Необязательного.

 public TicketEntity findTicket(String ticket) throws EntityNotFoundException {

    Optional<TicketEntity> op = ticketEntityRepository.findById(ticket);

    TicketEntity ticketEntity = op.orElseThrow(() -> new EntityNotFoundException("ticket with the id " + ticket + " not found in the system"));

    return ticketEntity;
}

Во время отладки я обнаружил, что значение op равно нулю. Это кусок кода, который терпит неудачу. Я использую Spring Data JPA 2.0.8.RELEASE. Пожалуйста, помогите

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Какова реализация вашего класса репозитория? Следующий репозиторий и контрольный пример работают для меня.

@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonRepoTest {

    @Autowired
    private PersonRepository personRepository;

    @Test
    public void testFindById(){
        Optional<Person> byId = personRepository.findById(1);
        Assert.assertTrue(byId != null);
    }
}

public interface PersonRepository  extends CrudRepository<Person, Integer> {
}
0 голосов
/ 28 июня 2018

В комментарии вы утверждаете, что это тест с поддельными зависимостями. Насмешка полностью исключает Spring Data JPA, так как теперь это просто прокси, реализованный имитатором из Mockito .

Поведение по умолчанию для макета - вернуть null.

По умолчанию для всех методов, которые возвращают значение, макет будет возвращать либо ноль, либо значение примитивной / примитивной оболочки, либо пустую коллекцию, в зависимости от ситуации. Например, 0 для int / Integer и false для логического / Boolean.

Когда вы бежите с макетом, вам нужно будет дать ему команду вернуть Optional.empty(), иначе вы получите null.

ПРИМЕЧАНИЕ: Возможно, вы захотите создать запрос на улучшение для Mockito с возвратом по умолчанию Optional.empty в случае типа возврата Optional.

0 голосов
/ 27 июня 2018

Строка кода

Необязательный op = ticketEntityRepository.findById (ticket);

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

List op = ticketEntityRepository.findById (ticket) .orElse (new ArrayList ());

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