Написать пользовательский SQL-запрос с использованием JPA

#java #sql #spring-boot #hibernate #jpa

#java #sql #spring-boot #переход в спящий режим #jpa

Вопрос:

У меня есть репозиторий JPA для объекта DB следующим образом:

 @Repository
public interface StudentRepository
    extends  JpaRepository<Student, String>  {
}
  

Student сущность выглядит следующим образом:

 @Entity
@Table(name = "student")
public class Student implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(generator = "custom-uuid")
  @GenericGenerator(name = "custom-uuid",
      strategy = "generator.CustomUUIDGenerator")
  private String id;

  @Column(name = "roll_number")
  private String rollNumber;

  @Column(name = "name")
  private String name;

  @LastModifiedDate
  @Column(name = "last_modified_date")
  @JsonIgnore
  private Instant lastModifiedDate = Instant.now();
  

Теперь я хотел бы написать следующий SQL-запрос с использованием JPA следующим образом:

 SELECT id, roll_number from  student where id=<id> order by last_modified_date desc;
  

Будучи новичком в JPA / Hibernate, я понятия не имею, как добиться этого с помощью JPA / Hibernate.

Может ли кто-нибудь, пожалуйста, помочь здесь?

Ответ №1:

Вы могли бы написать что-то вроде:

 String hql = "SELECT s.id, s.rollNumber FROM Student s WHERE s.id = :id ORDER BY s.lastModifiedDate DESC";
query.setParameter("id", 10);
Query query = session.createQuery(hql);
List results = query.list();
  

См.: https://www.tutorialspoint.com/jpa/jpa_jpql.htm

Ответ №2:

Создайте новый метод в репозитории

 @Repository
public interface StudentRepository extends JpaRepository<Student, String> {

    /**
     * List all student by criterias.
     *
     * @return
     */
    @Query(value = "SELECT id, roll_number from student where id=?1 order by last_modified_date desc;", nativeQuery = true)
    List<Student> listStudent(String id);

}
  

Справочный документ: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query