В чем разница между аннотациями @Entity и @Repository? - PullRequest
1 голос
/ 27 января 2020

Я новичок весной и в спящем режиме, и я получил эти две аннотации @Entity и @Repository для класса DAO. Поскольку обе аннотации используются для класса DAO. Тогда какая разница и когда использовать один из них.

Ответы [ 3 ]

1 голос
/ 27 января 2020

@ Аннотация объекта определяет, что класс можно сопоставить с таблицей, это просто маркер, как, например, интерфейс Serializable. Сущность - это объект, представляющий (обычно) строку в БД.

@ Репозиторий аннотации определяет операцию CRUD над таблицей. Это очень похоже на шаблон DAO для извлечения и сохранения объектов из / в хранилище - он представляет собой таблицу базы данных.

0 голосов
/ 27 января 2020

@ Entity

Допустим, у нас есть POJO с именем Student, который представляет данные студента, и мы хотели бы сохранить их в базе данных.

public class Student {

    // fields, getters and setters

}

Чтобы сделать это, мы должны определить сущность, чтобы JPA знал об этом.

Итак, давайте определим это, используя аннотацию @Entity. Мы должны указать эту аннотацию на уровне класса.

@Entity
public class Student {

    // fields, getters and setters

}

В большинстве типичных приложений у нас есть различные уровни, такие как доступ к данным, презентация, сервис, бизнес и т. Д. c.

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

@ Репозиторий

@ Репозиторий аннотирует классы на уровне персистентности, которые будут действовать как репозиторий базы данных. , Задача @ Repository заключается в том, чтобы отлавливать определенные персистентностью c исключения и перебрасывать их как одно из унифицированных непроверенных исключений Spring.

для суммирования @ Entity является частью JPA Java Спецификация API сохраняемости использовала отображение между java POJO и сущностью в мире реляционных баз данных и @ Repository - это стереотип Spring, используемый для аннотирования объектов POJO, а их задания - это операции с базой данных

0 голосов
/ 27 января 2020

Класс @Entity - это модель, а @Repository - это слой, который помогает вам извлекать данные из базы данных. Например:

@Entity
public class Student {
   @Id
   @GeneratedValue(strategy=GenerationType.IDENTITY) 
   private Long id;

   @Column(unique=true)
   private String name;

   //getters - setters

}

и репозиторий:

 @Repository
 public interface StudentRepository extends CrudRepository<Student,Long> {
  public Student findByName(String name);
 }

Базовые операции c CRUD уже предоставлены интерфейсом CrudRepository, поэтому нет необходимости реализовывать их снова. Вы можете использовать их в классе Service следующим образом:

 @Service
 public class StudentServiceImpl implements StudentService {
    @Autowired
    public StudentRepository studentRepository;

    @Override
    public List<Student> findAll()
    {
      return studentRepository.findAll():
    }

    @Override
    public Student findByName(String name)
    {
      return studentRepository.findByName(name);
    }
 }

И в случае, если вы хотите сделать пользовательские запросы, например, получить ученика по имени, jpa hibernate очень умен и помогает вам определять метод только в аннотированный интерфейс @Repository, и нет необходимости в каких-либо реализациях. НО здесь есть правило, если вы хотите, чтобы оно работало. Hibernate будет выглядеть после имени метода следующим образом: public Student findByName(String name); find и Student тип возврата сообщает hibernate, что он должен искать Student, byName сообщит что он должен запросить базу данных для ученика с указанным c именем. (Ключевое слово Name на самом деле является атрибутом сущности с заглавной буквой!)

Но, конечно, если вам нужны более сложные запросы, есть аннотация @Query, которая поможет вам в этом. :).

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