Spring Data Jpa как получить объект по id?

136
17 февраля 2022, 02:10

Я новичок в Spring и поэтому не очень понимаю почему без танцев с бубнами я не могу просто взять и получить из таблицы объект по его id...

Для работы с базой данных я создал

public interface TableRepository extends JpaRepository<User,Long>, JpaSpecificationExecutor

{ ... }

В основном классе при помощи TableRepository я могу получить список всех элементов из базы данных

List<User> userList = (List<User>) tableRepository.findAll();
    for (User us : userList)
    {
        System.out.println(us.toString());
    }

Со всеми этими элементами я могу работать как с объектами и делать с ними все что описано в классе-сущности

Когда я пытаюсь вызвать

User user = (User) tableRepository.findById(10L);

Intellij Idea говорит, что не верная запись и исправляет на

Optional<User> user = tableRepository.findById(10L);

В результате этого я не могу работать с user как с экземпляром класса-сущности. Не понятно на что он ссылается. Нигде толком не описано что такое Optional.

Я могу сам составить запрос, но здесь же есть готовые методы

Как можно просто получить объект по id? Ну или как работать с Optional? Спасибо за любую помощь

Answer 1

Вы наследуете интерфейс от JpaRepository там уже реализованы некоторые методы работы с сущностями в том числе и поиск по id; Благодаря дженерикам <User,Long> Spring понимает что какого типа у него идентификатор и объект какого типа он должен вернуть, поэтому в репозитории метод поиска по id писать не нужно.

@Repository
public interface UserRepository extends JpaRepository<User,Long>{
}

Прописываете в сервисе внедрение объекта репозитория с помощью аннотации @Autowired, теперь можно обращаться к методам репозитория

@Service
public class UserService{
   @Autowired
   private UserRepository repo;
   public User getUser(Long id){
       return repo.getOne(id);
   }
}
READ ALSO
Как работает итератор в HashSet java

Как работает итератор в HashSet java

В LinkedHashSet есть хедер и там итератор по проходит по связному спискуНо в HashSet нет связного списка

129
Не могу понять,в чём ошибка

Не могу понять,в чём ошибка

Только начал изучать принципы "ООП"Хотел сделать программу, которая считывает символы, переводит их в смайликовый формат

122
Сериализация коллекции в Java

Сериализация коллекции в Java

Можно ли проводить сериализацию не объекта класса, а коллекции?

127
Рандомный генератор фраз/ошибка: cannot find symbol

Рандомный генератор фраз/ошибка: cannot find symbol

Проблема возникла со словами после знака присвоения

95